繁体   English   中英

如何列出xmlstarlet中子元素的每个可能的父元素

[英]How to list every possible parent elements of a child element in xmlstarlet

给定此数据:

<root>
  <A>
    <A1 id="1">
        <elem>apple</elem>
    </A1>
  </A>

  <B>
    <B1 id="2">
        <elem>banana</elem>
    </B1>
  </B>

  <C id="3">
    <elem>grapes</elem>
    <C1></C1>
  </C>
</root>

如何找出元素elem的每个可能的父元素? 到目前为止,我可以通过以下方式找到使用-m选项的方法:

$ xmlstarlet sel -t -m '//elem/..' -v 'concat(name(),"=",@id)' -n input3.xml
A1=1
B1=2
C=3

$

但是,如何使用带有-v的xpath表达式来做同样的事情? 例如,我只能引用父级的id属性,而不能引用父级元素的名称:

$ xmlstarlet sel -t -v '//elem/../@id' input3.xml
1
2
3
$

您可以这样做:

xmlstarlet sel -t -v "name(//elem/..)" input3.xml

但这只会为您提供第一个匹配项的名称(xmlstarlet是XPath 1.0处理器)。

就像您发现的那样,唯一的方法是首先匹配( -m ):

xmlstarlet sel -t -m "//elem/.." -v "name()" -n input3.xml

尽管我希望使用稍微不同的XPath:

xmlstarlet sel -t -m "//*[elem]" -v "name()" -n input3.xml

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM