我想检索某些XML元素,但前提是它们不包含带有starlet的特定属性。
这是文件myFile.xml中的XML示例:
<?xml version="1.0"?>
<document>
<classInfo>
<subjects>
<subject id="1" type="someType">
<subjectname>Foo1</subjectname>
</subject>
<subject id="2" subtype="someSubtype" type="someType">
<subjectname>Foo2</subjectname>
</subject>
</subjects>
</classInfo>
</document>
现在,应进一步考虑所有不具有子类型的元素,而应忽略所有具有子类型(任何子类型)的元素。
到目前为止,只有考虑所有元素的xmlstarlet选择:
xmlstarlet sel -T -t -m "//subject[@type='someType']" -v '@id' -o $'\t' -v 'subjectname[text()]' -nl myFile.xml
这导致
1 Foo1
2 Foo2
但是理想的结果是
1 Foo1
以哪种方式可以增强选择范围,以省略每个具有子类型的主题?
尝试将谓词添加[not(@subtype)]
到您的匹配项中...
-m "//subject[@type='someType'][not(@subtype)]"
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句