我没有获得外部 DTD(同一文件夹中的本地文件)来使用相对或绝对路径。它不会扩展变量并在 Firefox 和 xmlstarlet 中给出错误。
教程.xml
<?xml version="1.0" standalone="no"?>
<!DOCTYPE tutorials SYSTEM "tutorials.dtd">
<tutorials type="web">
<tutorial>
<name>XML Tutorial</name>
<url>https://www.quackit.com/xml/tutorial</url>
<author>&writer;</author>
</tutorial>
<tutorial>
<name>HTML Tutorial</name>
<url>https://www.quackit.com/html/tutorial</url>
<author>&writer;</author>
</tutorial>
</tutorials>
教程.dtd
<!ELEMENT tutorials (tutorial)+>
<!ATTLIST tutorials type CDATA #REQUIRED>
<!ELEMENT tutorial (name,url,author)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT url (#PCDATA)>
<!ELEMENT author (#PCDATA)>
<!ENTITY writer "Site by Donald Duck">
解析错误:
$ xmlstarlet fo tutorials.xml
> tutorials.xml:7.21: Entity 'writer' not defined
但是有效吗?
$ xmlstarlet val -d tutorials.dtd tutorials.xml
> tutorials.xml - valid
您可以使用更现代的 XML 解析器,例如
xidel
:
xidel file.xml -e "." --output-format=xml
产量:
<?xml version="1.0" encoding="UTF-8"?>
<tutorials type="web">
<tutorial>
<name>XML Tutorial</name>
<url>https://www.quackit.com/xml/tutorial</url>
<author>&writer;</author>
</tutorial>
<tutorial>
<name>HTML Tutorial</name>
<url>https://www.quackit.com/html/tutorial</url>
<author>&writer;</author>
</tutorial>
</tutorials>