2

私はxmlstarletで解析する必要がある非常に単純なXMLファイルを持っています(私はWindowsの下にいます):

<?xml version="1.0" encoding="utf-8"?>
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.02" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <pain.001.001.02>
    <GrpHdr>
      <MsgId>IDENTIFYER</MsgId>
      <CreDtTm>2013-01-25T11:15:02</CreDtTm>
      <NbOfTxs>6</NbOfTxs>
      <CtrlSum>6268.07</CtrlSum>
      <Grpg>MIXD</Grpg>
    </GrpHdr>
   <PmtInf>
   </PmtInf>
  </pain.001.001.02>
</Document>

CtrlSum 要素を取得したいとしましょう。試してみると失敗します

xml sel -t -m "/Document/pain.001.001.02/GrpHdr" -v CtrlSum myfile.xml

しかし、ファイルから xmlns および xmlns:xsi 属性を削除すると機能します (ただし、実際にはできません)。-N オプションを使用する必要があることはわかっていますが、その方法がわかりません。どんな助けも非常に価値があります。

ローラン(またはローレンス、またはラリー:))に感謝します

4

2 に答える 2

5

属性はデフォルトのxmlns名前空間を定義します.XMLファイルに表示されるプレフィックスを持たないすべての要素(投稿した例ではすべての要素です)はデフォルトの名前空間を使用します。XPath ではデフォルトの名前空間が許可されていないため、プレフィックスに -N を割り当て、一致するときにそれを使用する必要があります。

xml sel -N p=urn:iso:std:iso:20022:tech:xsd:pain.001.001.02 -t -v /p:Document/p:pain.001.001.02/p:GrpHdr/p:CtrlSum myfile.xml
于 2013-01-26T02:33:37.303 に答える