Вопрос про XML, DTD и XSL

xml xsl DTD

Есть текст, разбитый на главы. В каждой главе возможно присутствует таблица, подглава, определения (определение - жирным текстом и далее тире и обьяснение), есть списки нумерованные.

Так вот, задали все это делать запихать в xml и сделать шаблон. Хочу сделать универсальный скрипт, т.е. не прописывать для каждой главы отдельные элемент и т.д.
Сделал так


<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT Program (Parts*)>
<!ELEMENT Parts (P_Title, P_Text*, Table*, Definition*, P_Subpart*)>
<!ELEMENT Subpart (P_Title, P_Text*, Table*, Definition*, S_Subpart*)>
<!ELEMENT P_Title (#PCDATA)>
<!ATTLIST P_Title
bold CDATA #IMPLIED
italic CDATA #IMPLIED
>
<!ELEMENT P_Text (#PCDATA)>
<!ATTLIST P_Text
bold CDATA #IMPLIED
italic CDATA #IMPLIED
dash CDATA #IMPLIED
underline CDATA #IMPLIED
>
<!ELEMENT Table (TitleRow+, Row+)>
<!ELEMENT TitleRow (Cell+)>
<!ELEMENT Row (Cell+)>
<!ELEMENT Cell (#PCDATA)>

<!ELEMENT Definition EMPTY>
<!ATTLIST Definition
d_bold CDATA #REQUIRED
d_text CDATA #REQUIRED
>


Т.е. для каждого вида элемента есть свой описание, таблицы, списки и т.д. Все элементы активны в разделах и подразделах.

Вот сам xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type='text/xsl' href='SSSprogram.xsl' ?>
<!DOCTYPE Program SYSTEM "SSSprogram.dtd">
<Program>
<Parts>
<P_Title>1. ЦЕЛИ И ЗАДАЧИ ДИСЦИПЛИНЫ</P_Title>
<P_Text br="">Целью и задачами дисциплины "Органическая химия" являются подготовка студентов разбираться в строении и свойствах органических веществ, которые широко используются в строительной технологии в качестве поверхностно-активных добавок, пластификаторов, гидрофобизаторов, а также в полимерных строительных материалах.</P_Text>
</Parts>

<Parts>
<P_Title>2. ТРЕБОВАНИЯ К УРОВНЮ ОСВОЕНИЯ СОДЕРЖАНИЯ ДИСЦИПЛИНЫ.</P_Title>
<P_Text>Студент должен знать:</P_Text>
<P_Text dash="-" >теорию строения А.М.Бутлерова, как основополагающую теорию строения органических соединений;</P_Text>
<P_Text dash="-" >зависимость между строением вещества и его физическими и химическими свойствами;</P_Text>
<P_Text dash="-" >классификацию органических соединений;</P_Text>
<P_Text dash="-" >основные типы и механизмы органических реакций.</P_Text>
<P_Text>Студент должен уметь:</P_Text>
<P_Text dash="-" >анализировать, сопоставлять разные классы органических соединений по их названию, методам получения и химическим свойствам;</P_Text>
<P_Text dash="-" >на основании полученных знаний предсказывать физические и химические свойства органических соединений известного строения;</P_Text>
<P_Text dash="-" >использовать достижения органической химии в своей работе и активно участвовать в производстве новых строительных материалов, изделий и конструкций, а также улучшать свойства известных строительных материалов.</P_Text>
<P_Text>Студент должен приобрести навыки:</P_Text>
<P_Text dash="-" >составления органических реакций;</P_Text>
<P_Text dash="-" >научного экспериментирования и исследовательского подхода к изучению органической химии;</P_Text>
<P_Text dash="-" >логического химического мышления.</P_Text>
</Parts>
<Parts>
<P_Title>3. ОБЪЕМ ДИСЦИПЛИНЫ И ВИДЫ УЧЕБНОЙ РАБОТЫ (ЧАС.)</P_Title>
<Table>
<TitleRow>
<Cell>Вид занятий</Cell>
<Cell>Всего часов</Cell>
<Cell>Семестров</Cell>
</TitleRow>
<Row>
<Cell>Общая трудоемкость</Cell>
<Cell>60</Cell>
<Cell>5</Cell>
</Row>
<Row>
<Cell>Аудиторные занятия</Cell>
<Cell>36</Cell>
<Cell>5</Cell>
</Row>
</Table>
</Parts>
</Program>


Все бы ничего, сделать вывод всего этого не сложно. НО
у нас может скажем идти сначала таблица, затем идти текст, а может наоборот.
Так вот как в xsl прописать, что порядок может быть разный, т.е. вывод должен идти по порядку записи в xml.

В этом всем новичок, но хочется сделать все хорошо и грамотно, а не схалявить и тупо настрочить кучу хлама..
Ответы:
Сделайте отдельные шаблоны с match="P_Text" и match="Table"


15 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.