2016-07-20 6 views
2

、与えられた:XMLStarletで複数の属性をフィルタリングする方法は?例えば

<fruit> 
    <banana source='Ecuador' category='I'> 
     <quantity>1</quantity> 
    </banana> 
    <banana source='Costa Rica' category='I'> 
     <quantity>1</quantity> 
    </banana> 
</fruit> 

は、私がフィルタリングしたい場合はどのように私はそれを参照します、私は

2に
<banana source='Costa Rica' category='II'> 

またはその量に

<banana source='Costa Rica' category='I'> 

を変更したいと言いますソースと初期カテゴリ値の両方で?


私は次のことをやろうとしている:

xmlstarlet ed -u "/fruit/banana[@source='Ecuador' @category='I']/quantity" -v 2 

...しかし、次のように、これは、構文エラーになり:

Invalid predicate: /fruit/banana[@source='Ecuador' @category='I']/quantity 
Invalid expression: /fruit/banana[@source='Ecuador' @category='I']/quantity 
+0

あなたは[ドキュメント](http://xmlstar.sourceforge.netを読みました/doc/xmlstarlet.pdf)?コマンドオプションを試しましたか?あなたが試したことを見せて、うまくいかなかったことを説明できますか? –

+0

はい、私は、1つの属性を持つ文書、参考文献、および例を読んでいます。 私はxmlstarlet ed -u "/ fruit/banana [@ source = 'エクアドル' /カテゴリ] - 量2 -v 2 example.xml しかし、それは私に与えます: 無効な述語:/ fruit/banana [@ source = 'エクアドル' @カテゴリ= 'I'] /数量 無効な表現:/ fruit/banana [@ source = 'エクアドル' @カテゴリ= 'I'] /数量 – EBM

+1

おそらく 'xpath'とタグ付けされます。 –

答えて

2

裁判のかなり後エラーが解決に達しました:

[]を閉じて、次の属性で再オープンする必要があります。たとえば、次のように

xmlstarlet ed -u "/fruit/banana[@source='Ecuador'][@category='I']/quantity" -v 2 example.xml 

と出力正しくなります

<?xml version="1.0"?> 
<fruit> 
    <banana source="Ecuador" category="I"> 
    <quantity>2</quantity> 
    </banana> 
    <banana source="Costa Rica" category="I"> 
    <quantity>1</quantity> 
    </banana> 
</fruit> 

編集:も動作します:

xmlstarlet ed -u "/fruit/banana[@source='Ecuador' and @category='I']/quantity" -v 2 example.xml 
+1

これは1つのアプローチです。 –

+1

...あなたは別の答えとして追加する準備をしていた他のアプローチを見つけました。 :) –

+0

@CharlesDuffy Eh-he、ありがとう。 – EBM

関連する問題