Проблема с xml

Я новичок в XML... Я только начал изучать XML.... У меня есть следующие сомнения.. Вот мой код XML

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE book [
<!ELEMENT book (page)>
<!ELEMENT page (heading,#PCDATA)>

 ]>
<note>
<page>
    hhh<heading>c</heading><heading>s</heading>
</page>
</note>

Когда я открыл это в браузере, это показало, что есть ошибка с #PCDATA... когда я заменил его на PCDATA, это не показало ошибку... Согласно моему DTD, страница может содержать ровно один элемент заголовка... верно? Но когда я открыл его в браузере, он не показывал ошибки, даже если у меня есть два элемента заголовка. Почему это произошло? Кроме того, в чем разница между CDATA и PCDATA....

2 ответа

Использовать этот:

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE note [
  <!ELEMENT note (page)>
  <!ELEMENT page (#PCDATA|heading)*>
  <!ELEMENT heading (#PCDATA)>

]>
<note>
  <page>
    hhh<heading>c</heading><heading>s</heading>
  </page>
</note>

PCDATA - это текст, который будет проанализирован парсером. Текст будет проверен парсером на предмет сущности и разметки.

CDATA - это текст, который НЕ будет анализироваться парсером. Теги внутри текста НЕ будут рассматриваться как разметка, а объекты не будут расширяться.

Мой совет - подобрать надежный анализатор, например AltovaXML (Community Edition), который очень прост в использовании:

altovaxml -validate document.xml

Давайте посмотрим, что не так с вашим DTD. Прежде всего ваш элемент документа (корень) не назван bookИтак, мы получили первую ошибку здесь:

Ошибка в указанной схеме или DTD. Элемент не соответствует имени корневого элемента 'book' из DTD.

Второе, что heading не объявлено:

Элемент не был объявлен.

Наконец, чтобы разрешить смешанный контент, выберите #PCDATA (это означает, что проанализированные символьные данные) сначала и heading элемент:

Наконец ваш DTD это:

<!DOCTYPE note [
    <!ELEMENT note (page)>
    <!ELEMENT page (#PCDATA | heading)*>
    <!ELEMENT heading (#PCDATA)>
]>
Другие вопросы по тегам