Тип элемента DTD для принятия '<'

1

У меня есть xml файл, который может выглядеть так:

<unclassified>
  WOOD FIRM FINED #30,000 OVER TEEN'S LOST ARM<
</unclassified>

.dtd:

<!ELEMENT unclassified   (#PCDATA)>

К сожалению, это не работает, так как я всегда получаю ошибку:

[Fatal Error] arm1sub.sgml:14:46: The content of elements must consist of well-formed character data or markup.
org.xml.sax.SAXParseException; systemId: file:/home/sfalk/workspace/project/target/classes/meter_corpus/PA/annotated/courts/12.07.99/arm/arm1sub.sgml; lineNumber: 14; columnNumber: 46; The content of elements must consist of well-formed character data or markup.
    at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:257)
    at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:348)
    at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:205)

Как я могу сделать эту работу? Надеюсь, что это возможно, без манипулирования моими XML файлами.

  • 1
    Это не проблема dtd - это просто не правильно сформированный XML. Это было бы сломано без какого-либо dtd вообще. Вы должны беспокоиться о том, что создало файлы XML.
  • 0
    Смотрите также stackoverflow.com/questions/730133/invalid-characters-in-xml/…
Теги:
dtd

2 ответа

2
Лучший ответ

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

Допуск DTD (и XSD) является валидацией, но предпосылкой для правильности XML является то, что он должен быть хорошо сформирован. (Фактически, предварительным условием для XML документа является то, что он хорошо сформирован.)

Прочтите хорошо сформированный vs Valid XML для подробного объяснения различий. Для вашей конкретной проблемы замените < with &lt; чтобы ваш XML был хорошо сформирован.

2

Если вы хотите использовать значение, которое содержит недопустимые символы для синтаксического анализа XML, вы можете использовать CDATA: http://www.w3schools.com/xml/xml_cdata.asp

<unclassified>
  <![CDATA[WOOD FIRM FINED #30,000 OVER TEEN'S LOST ARM<]]>
</unclassified>

или бухте, если вы станете ниже, чем вы этого не хотели...

<unclassified>
  WOOD FIRM FINED #30,000 OVER TEEN'S LOST ARM
</unclassified>

Ещё вопросы

Сообщество Overcoder
Наверх
Меню