命令:
xmllint myfile.xml --xpath 'MapField2Data[@country="FR"]/*[@active!="false" or not(@active) ]'对我的 xml 结构
按预期工作
但是尝试在 xsd 中使用它,它无法编译:
xmllint --loaddtd --noout --noent --xinclude --schema xsd/pnsConf.xsd pnsConf.xml
xsd/pnsConf.xsd:75:元素选择器:模式解析器错误:元素'{ http://www.w3. org/2001/XMLSchema }selector,属性 'xpath':无法编译 XPath 表达式 'MapField2Data[@country="FR"]/*[@active!="false" or not(@active)]'。
我的xsd有一个合适的
<xsd:selector xpath='MapField2Data[@country="FR"]/*[@active!="false" or not(@active) ]'/>
在这两种情况下,像“MapField2Data/*”这样更简单的 xpath 都可以正常工作。
这看起来像是 xmllint 或 libxml2 中的错误或缺失功能。
我应该在 gnome bugzilla 上为 xmllint 提交错误吗?
也许同时我的问题还有另一种解决方案?
我希望“活动”标签是唯一的,并在这样的结构中忽略非活动标签:
<MapField2Data country='FR' >
<raw id='NoUnReadMails' active='true'>
<depend ref='_EndMailNotif'/>
<depend ref='_EndMailSub' />
</raw>
<raw id='NoUnReadMails' active='false'>
<depend ref='_EndMailNotif'/>
<depend ref='_EndMailSub' />
</raw>
<raw id='NoEMails' >
<depend ref='_EndMailNotif'/>
<depend ref='_EndMailSub' />
</raw>
...
问候,伊曼纽尔。