2017-03-12 4 views
1

に子要素のすべての可能な親要素をリストにこのデータを考える:どのように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式を使用して同じことをどのように行うのですか?あなたが行うことができ

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

答えて

2

:たとえば、私は、親のID属性ではなく、親要素の名前を参照することができ

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

が、それが唯一のあなたの名前を与えるために起こっています最初の一致(xmlstarletはXPath 1.0プロセッサです)。あなたが見つけた

これを行うための唯一の方法は、最初に(-m)を照合することによってである:

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

ありがとう:

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

私は少し異なるXPathを好むだろうが。できます。私は別のアイデアが出てくるまで数日待ってからこの答えを受け入れるつもりです。 – ifelsemonkey

+0

@daixtr - この回答を受け入れることを検討してください。より良い回答が掲載されている場合は、いつ受け入れられるかを変更することができます。 –

関連する問題