Вы можете использовать такой инструмент, как xmlstarlet, для проверки XML по DTD.
Вот пример из справки xmlstarlet:
Usage: xmlstarlet val <options> [ <xml-file-or-uri> ... ]
where <options>
-w or --well-formed - validate well-formedness only (default)
-d or --dtd <dtd-file> - validate against DTD
--net - allow network access
-s or --xsd <xsd-file> - validate against XSD schema
-E or --embed - validate using embedded DTD
...
В вашем случае соответствующая команда может выглядеть следующим образом:
xmlstarlet val -d note.dtd note.xml
Чтобы получить строковое значение
Напоминание Tove Jani Не забывайте меня в эти выходные!
вы должны использоватьXPath. Выражение XPath-1.0 в вашем случае может быть:
normalize-space(/note)
Затем передайте это выражение XPath-1.0, например, xmlstarlet, например
xmlstarlet sel -t -v 'normalize-space(/note)' note.xml
, чтобы получить желаемый результат.
Конечно, вы можете использовать другие инструменты;xmlstarlet был просто примером.