我有一个xml文件,其结构如下所示:
<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>
我想根据role
代码的值找到sid
代码名称属性。
例如:如果我搜索abc
,则查询必须返回测试,test1
和test2
我在下面提到了这个链接,得到了一半解决方案。
XMLStarlet Return attribute based on value (Reverse lookup)
我也提到了这个
http://xmlstar.sourceforge.net/doc/UG/xmlstarlet-ug.html
但我没有任何能够支持我的要求的例子。
我能做些什么吗?
答案 0 :(得分:1)
你可以使用的XPath表达式是//role[.//sid = 'abc'
]/@name
,xmlstarlet的命令行是xmled.exe sel -t -v "//role[.//sid = 'abc']/@name" input.xml
(我认为这取决于你需要用来包装XPath表达式的命令行shell的引号字符)
答案 1 :(得分:0)
即使@ martin-honnen给出的XPATH是正确的,我也没有得到预期的输出。这是因为我的系统中安装了旧版本的xmlstarlet 1.0.1。当我升级到1.6.1时,问题就解决了。
这是链接,@ kjhughes帮助我找到了解决方案
xmlstarlet XPath expression selects single result rather than multiple