外部 DTD 未解析/“实体未定义错误”

问题描述 投票:0回答:1

我没有获得外部 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 dtd xmlstarlet
1个回答
0
投票

您可以使用更现代的 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>&amp;writer;</author>
  </tutorial>
  <tutorial>
    <name>HTML Tutorial</name>
    <url>https://www.quackit.com/html/tutorial</url>
    <author>&amp;writer;</author>
  </tutorial>
</tutorials>
© www.soinside.com 2019 - 2024. All rights reserved.