gpt4 book ai didi

xmllint : how to validate an XML using a local DTD file

转载 作者:数据小太阳 更新时间:2023-10-29 01:40:10 24 4
gpt4 key购买 nike

我有一个本地 DTD 文件 test.dtd。内容是:

<!DOCTYPE coord [
<!ELEMENT coord (date)>
<!ELEMENT date (#PCDATA)>
]>

我想使用 xmllint 验证 XML。此 XML 中没有 DOCTYPE:

<?xml version="1.0" encoding="x-mac-roman"?>
<coord>
<date>20150312</date>
</coord>

如果我将 DTD block 作为第二行插入到我的 XML 文件的副本中并使用:

xmllint --valid --noout my2.xml

但是当我尝试时:

xmllint --loaddtd test.dtd --valid --noout my.xml

xmllint --dtdvalid test.dtd --noout my.xml

两者都不行。输出是:

test.dtd:1: parser error : Content error in the external subset
<!DOCTYPE coord [
^
test.dtd:1: parser error : Content error in the external subset
<!DOCTYPE coord [
^
Could not parse DTD test.dtd

有什么想法吗?似乎我的 XML 必须 包含一个 DOCTYPE 行(带有 SYSTEM 关键字)以引用我想避免的外部 DOCTYPE 文件。请参阅:http://www.w3schools.com/dtd/

有没有不修改XML的解决方案?

最佳答案

首先,外部 DTD 不需要 <!DOCTYPE序言 - 从 DTD 文件中删除它:

<!ELEMENT coord (date)>
<!ELEMENT date (#PCDATA)>

然后,--loaddtd 获取外部 DTD,这与针对外部 DTD 进行验证不同。使用 --dtdvalid选项如下:

$ xmllint --noout --dtdvalid test.dtd test.xml

如果 XML 文档有效,xmllint 将不会输出任何内容(因为 --noout)。如果您将 DTD 更改为:

<!ELEMENT coord (date,other)>
<!ELEMENT date (#PCDATA)>

输出将是

$ xmllint --noout --dtdvalid test.dtd test.xml
test.xml:2: element coord: validity error : Element coord content does not follow the DTD, expecting (date , other), got (date )
Document test.xml does not validate against test.dtd

NMT 的文档页面上查找更多信息或 XMLSoft .

关于xmllint : how to validate an XML using a local DTD file,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29072962/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com