2017-06-17 3 views
0

私はこのXMLを持っており、シリアル番号を抽出しようとしています。位置に関係なく特定の名前の要素のインスタンスを見つけることが可能

しかし、シリアル番号は同じレベルではないので、私が使用しているツールでは1つのXPATH式で処理する必要があるため、これを達成するのは難しいです。

<rpc-reply> 
    <chassis-inventory> 
     <chassis junos:style="inventory"> 
      <name>Chassis</name> 
      <serial-number>AAABBB</serial-number> 
      <description>SRX220H</description> 
      <chassis-module> 
       <name>Routing Engine</name> 
       <version>REV 23</version> 
       <part-number>750-031175</part-number> 
       <serial-number>XXXYYY</serial-number> 
       <description>RE-SRX220H</description> 
      </chassis-module> 
      <chassis-module> 
       <name>FPC 0</name> 
       <description>FPC</description> 
       <chassis-sub-module> 
        <name>PIC 0</name> 
        <description>8x GE Base PIC</description> 
       </chassis-sub-module> 
      </chassis-module> 
      <chassis-module> 
       <name>Power Supply 0</name> 
      </chassis-module> 
     </chassis> 
    </chassis-inventory> 
    <cli> 
     <banner></banner> 
    </cli> 
</rpc-reply> 

私が抽出したいデータがある:

<name>Chassis</name> 
<serial-number>AAABBB</serial-number> 

<name>Routing Engine</name> 
<serial-number>XXXYYY</serial-number> 

任意のアイデア?

種類のよろしく、

パトリック

+0

あなたの試行と現在の出力を表示します。あなたのツールで使用する 'XPath'バージョンも指定してください – Andersson

+0

こんにちは、あなたのコメントをありがとう!私はデータを見つけるための「ポジションに依存しない」方法を見つけることができなかったので、あまり表示する必要はありません。私の考えは、* name *と* serial-number *を持つすべての "レベル"を取得して表示することでした。このツールは独自のサードパーティ製であるため、実際にはどのバージョンであるのか分かりません。 – PatrikJ

+0

あなたはXMLの観点からこれらの要素を選択するための基礎を述べていません。あなたがそうするまで、あなたが得るすべてはあなたのために一般的に働くかもしれないし、そうでないかもしれない推測になります。 – kjhughes

答えて

1

が必要な出力を得るためにXPath表現の下に使用してみてください:

//chassis-module[1]//preceding::*[name()=("name", "serial-number")] 
+0

私は通常、XPathをテストするためにhttps://codebeautify.org/Xpath-Testerを試していますが、少なくともそこでは動作しませんでした。先行することを調べます。ありがとう! – PatrikJ

+0

このXPathにはXPath 2.0が必要です。また、OPは選択される要素の基準を明記していないため、問題は現状としてはあまりにも明白ではない。 – kjhughes

+0

私は上記のようにしましたが、素人の言葉で言いました。 – PatrikJ

0

私たちは、このようにそれを "解く" ことになりました。わからない、これは純粋なXPathのかではありませんが、それは働いていた場合:私の下手に書かれたXPath質問を解読するすべての試みのため

/rpc-reply//chassis | /rpc-reply//chassis-module 

ありがとう!

/パトリック

+1

あなたの表現の出力は、質問に要求された出力に近いものでもありません:)) – Andersson

+0

Haha、agree!しかし経験が不足していることを考えれば、最初に仕事をすることができました。 :)質問は未回答のままです。 – PatrikJ

関連する問題