我有一个xml文件,其结构类似于input.xml
:
<myxml>
<role name="test" pattern=".*">
<assignedSIDs>
<sid>abc</sid>
<sid>cde</sid>
<sid>def</sid>
</assignedSIDs>
</role>
<role name="test1" pattern=".*">
<assignedSIDs>
<sid>abc</sid>
<sid>zxc</sid>
<sid>vbn</sid>
</assignedSIDs>
</role>
<role name="test2" pattern=".*">
<assignedSIDs>
<sid>abc</sid>
<sid>hex</sid>
<sid>oct</sid>
</assignedSIDs>
</role>
</myxml>
我想根据sid
标记的值查找role
标记名称属性。例如:如果我搜索abc
,查询必须返回test、test1
和test2
我参考了下面的链接,并得到了一半的解决方案:XMLStarlet Return attribute based on value (Reverse lookup)
我也提到了这一点:http://xmlstar.sourceforge.net/doc/UG/xmlstarlet-ug.html
但我没有找到任何例子来支持我的要求。
有什么我能做的吗?
2条答案
按热度按时间tquggr8v1#
可以使用的XPath表达式为:
//role[.//sid = 'abc']/@name
xmlstarlet的命令行为:
(我认为这取决于您的命令行shell需要使用哪个引号字符来 Package XPath表达式)。
4dbbbstv2#
即使@martin-honnen给出的XPATH是正确的,我也没有得到预期的输出。这是由于我的系统中安装了旧版本的xmlstarlet 1.0.1。当我升级到1.6.1时,问题解决了。
这里有一个链接,@kjhughes帮助我找到了xmlstarlet XPath表达式选择单个结果而不是多个结果的解决方案