2017-05-25 10 views
2

私はこれをさまざまなオプションで解決しようとしてきましたが、正しい方法を見つけることができませんでした。ここ はXMLファイルです:xmlstarletはテキスト値に基づいて兄弟を選択します

<?xml version="1.0" encoding="UTF-8"?> 
<Package xmlns="http://soap.sforce.com/2006/04/metadata"> 
    <types> 
     <members>PriceRule__c.All</members> 
     <members>PriceRule__c.None</members> 
     <members>ProductRule__c.All</members> 
     <members>Quote__c.All_Quotes</members> 
     <members>SummaryVariable__c.All</members> 
     <name>ListView</name> 
    </types> 
    <types> 
     <members>*</members> 
     <name>AnalyticSnapshot</name> 
    </types> 
</Package> 

私はPriceRule__cで始まる「メンバー」ノードに対して同じ「タイプ」ノードにある「名前」ノードのテキストを取得できるようにしたいです。

echo $(xmlstarlet sel -N x="http://soap.sforce.com/2006/04/metadata" -t -v "//x:types/*[starts-with(text(),'PriceRule__c')]" test.xml) 

これはアウト出力します:

PriceRule__c.All PriceRule__c.None 

しかし、私が必要とする値リストビューを取得する方法である ここに私が実際にそれらのノードの値を見つけることだった得ることができる最も遠いです XPathがこれを取得する方法は何ですか? ありがとうございます!

答えて

2

//x:types[starts-with(x:members,'PriceRule__c')]/x:name 

にあなたのXPathを変更

し、要求されたとして、あなたは、値、ListViewx:nameを選択します。

+0

ありがとうございました!これは私が探していたものです! –

+0

この例では/が表す "x:"が何であるかはっきりしていません。 –

+2

@BillHileman:XML文書のデフォルトの名前空間をカバーするために、xmlstarletの '-N'を介してOPによって定義された名前空間接頭辞です。 [*** XPathはXML名前空間をどのように扱うのですか?***](https://stackoverflow.com/questions/40796231/how-does-xpath-deal-with-xml-namespaces)を参照してください。 – kjhughes

関連する問題