Проблема с 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)>
]>