我有一个本地 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
关于xmllint : how to validate an XML using a local DTD file,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29072962/
我有下面的XML并且想提取最后一个版本元素的值org.continuous.IntegrationContinuous-Integration1.11-SNAPSHOT1.12-SNAPSHOT1.13-SNAPSHOT1.14-SNAPSHOT1.15-SNAPSHOT........1.N-SNAPSHOT20161220194944我正在使用xmllint并且下面的命令返回所有版本值echo"cat//versioning/versions/version"|xmllint--shellmaven-metadata.xml|sed'/^\/>/d'|sed's/]*.//g'20
我在使用xmllint根据XSD模式验证XML文件时遇到问题:xmllintcompainswithavalidityerrorthatataglike虽然foobar不符合预期在XSD架构中定义如下:比较:123根据xmllint是有效的。xmllint也不会提示,如果我去掉thsfoobar完全从XML文件中标记。问题:那么,拒绝有什么意义呢??谢谢!P.S.:实际的错误信息:myfile.xml:135298:elementfoobar:Schemasvalidityerror:Element'{http://www.foobaz.com/namespace}foobar':''
我需要从此xml中提取名称值(产品查找器):文件:config.xmlProductFinderDescription我试过:mles$xmllint--xpath"/widget/name/text()"config.xmlXPathsetisempty这可能是因为我的config.xml文件有其他命名空间。根据this问题我需要手动设置命名空间。所以我试过了:mles$xmllint--shellconfig.xml/>setnsx=http://www.w3.org/ns/widgets/>xpath/x:widget/name/text这个没有输出。使用xmllint提取名称值
如何在没有任何额外信息的情况下从xml中读取cdata标签信息测试.xml测试.shStreamingkey="$(echo"cat/EncodingKeys/Streaming/text()"|xmllint--nocdata--shelltest.xml|sed'1d;$d')"Uploadskey="$(echo"cat/EncodingKeys/Uploads/text()"|xmllint--nocdata--shelltest.xml|sed'1d;$d')"echo$Streamingkeyecho$Uploadskey实际输出:54G91A8?s7^F97C]Fyj*8
我正在尝试验证此XML文档:AliceBob针对以下DTD:运行xmllint--dtdvalidtest.dtdtest.xml产生:test.xml:3:elementCONTACT:validityerror:SyntaxofvalueforattributeCONTACT_NUMofCONTACTisnotvalidtest.xml:7:elementCONTACT:validityerror:SyntaxofvalueforattributeCONTACT_NUMofCONTACTisnotvalidDocumenttest.xmldoesnotvalidateagainst
我最近在SublimeText3中安装了SublimeLinter,以帮助我正确编写JavaScript文件。我还设置了xmllint来帮助我处理我使用的XML文件。但是我无法让它在SublimeText3中运行。我关注了thesesteps要安装并运行它,我可以从命令提示符中列出它的目录,一切都井井有条。SublimeText3中也启用了Xmllint。但是,当我在SublimeText3中处理XML文件时,linter似乎无法正常工作。如何配置xmllint以便它在SublimeText3中运行? 最佳答案 找到答案here在底
我尝试使用同一文件夹中随后的xsd文件验证以下XML。根据AltovaXMLSpy的说法,这是完全有效的,但为了帮助一些没有许可证的同事找出基本错误,我尝试使用python和“lxml.etree”以及xmllint验证文件。这两个说xml无效并显示相同的消息:machineDB.xml:20:Schemasvalidityerror:Element'canframe':Nomatchfoundforkey-sequence['remotebus']ofkeyref'busRef'.machineDB.xmlfailstovalidate有人可以帮助找出任何人的错误吗?版本:Altov
我想使用xmllint中的xpath来获取主机名和序列号。这是XML..我可以获取主机名为blah*的所有连续剧:/>cat//hosts/host[starts-with(@name,"blah")]/@serial-------serial="ABC001"-------serial="ABC002"但我也想看看哪个主机名有那个序列号。这可能吗? 最佳答案 这可以在xmllint中使用以下XPath表达式完成。假设您的XML名为hosts.xml。xmllinthosts.xml--xpath'//host[starts-wit
]$xmllint--versionxmllint:usinglibxmlversion20626我的xml文件看起来像这样:............例如,我想在给定条件name==ARCH2和state==StringC2的情况下获取值StringB2。是否可以使用xmllint命令行选项,如果可以,如何使用?一些例子将是有益的。我可以使用sed或awk提取这些,但这可能不是一个好的解决方案。 最佳答案 尝试以下操作xmllint--xpath'string(///project[../@name="ARCH1"and@state
我知道我的问题包括2个问题...起初,我想用xmllint输出“loc”内容标签。我加载的站点地图有一个xmlns="..."。在xmllintshell上,我需要这样做:setrootnsxpath//defaultns:loc那行得通……没问题。但我需要在bash脚本中执行此操作。(AFAIK)xmllint没有告诉“我们走吧,setrootns”的选项,所以我不能这样做:xmllint--xpath"//loc"sitemaps.xml#orxmllint--xpath"//defaultns:loc"sitemaps.xml这是第一个问题,我如何告诉xmllint加载默认的ns