0

命令:
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>
...

问候,伊曼纽尔。

4

1 回答 1

1

这不是错误。xsd:selector只允许一组受限制的 XPath 操作。您的表达式使用了不允许的谓词。另请参阅此问题

于 2014-02-27T16:45:45.040 回答