2016-06-14 11 views
0

BillPlan = "UBM-A/A"のときにObjDeviceの値を抽出するXML応答があります。あなたはXMLStarletを使用して同じXML応答から変数の値を抽出するためのシェルスクリプト

<Txn> 
      <TxnName>Spectrum-AlertSite-Component_spectrum.engprod_InstantUpgradeEdge_GetProductOffersByAccount_getProductOffersByAccountValid</TxnName> 
      <TxnDetail Monitor="y" Notify="y" PingError="n" 
    TraceError="y" Interval="5" TimeOut="300" 
    ObjDevice="318373" BillPlan="UBM - A/A" MaxSteps="50" 

/> 
     </Txn> 
     <Txn> 
      <TxnName>Spectrum-AlertSite-Component_spectrum.engprod_InstantUpgradeEdge_GetProductOffersByAccount_getProductOffersByAccountValid</TxnName> 
      <TxnDetail Monitor="y" Notify="y" PingError="n" 
    TraceError="y" Interval="5" TimeOut="300" 
    ObjDevice="318377" BillPlan="UBM - A/A" MaxSteps="50" 

/> 
+0

他の「どのようにシェルのXML文書から値を抽出するのですか」の質問はありますか? –

答えて

1

さて、あなたがいない場合XMLファイルを処理するための特別なツールを用意しておき、同じ行に両方の値を指定して実行することができます:

申し訳
grep 'BillPlan="UBM - A/A"' | sed 's,.*ObjDevice="\([0-9]*\)" BillPlan="UBM - A/A".*,\1," 

私はフィルタリングするSEDが、SEDとそれほど慣れていない使用していないとも* nixのにアクセスすることはできませんが、多分他の誰かが私たちに短いバージョン

+0

あなたの 'sed'コマンドで' s'で始めるか、 'sed -ne '/ BillPlan =" UBM-A \/A "/ s、* ObjDevice =" \([0-9] * \) "BillPlan =" UBM - A/A "。*、\ 1、p" –

1

を行うには、シェルスクリプトで私を助けてくださいすることができます

xmlstarlet sel -t -m '//TxnDetail[@BillPlan="UBM - A/A"]' \ 
        -v ./@ObjDevice -n \ 
    <in.xml 
1

Xidelを行うことができますして:

xidel /tmp/foo.xml -e '//TxnDetail[@BillPlan="UBM - A/A"]/@ObjDevice' 
1

を与えることができ、私はlibxml2をasume場合

xmllint --xpath '//TxnDetail[@BillPlan="UBM - A/A"]/@ObjDevice' input.xml 
関連する問題