0
$ xmlstarlet sel -t -c "//str[@name="id" and .="http://localhost:8080/index.html"]/../str[@name="doc-norm"]"/value results.xml

私の理解では、xmlstarletxpath式を完全にはサポートしていません。ところで、他にコマンドラインツールはありますか?

<doc>
    <str name="id">http://localhost:8080/index.html</str>
    <str name="doc-norm">6</str>
</doc>
4

1 に答える 1

2

あなたはあなたの例からを返そうとしてい6ますか?

これをテストするためのxmlstarletはありませんが、次のXPathを試してください。

//*[str[@name='id']='http://localhost:8080/index.html']/str[@name='doc-norm']

これは、親要素に値が。の属性を持つ子要素がある場合の値を持つ属性をstr持つ要素の値を返す必要があります。(それが理にかなっていることを願っています!)namedoc-normstridhttp://localhost:8080/index.html

また、親要素のレベルがわかっている場合は、を使用しないようにしてください//。のようなもの/doc[str[@name='id']='http://localhost:8080/index.html']/str[@name='doc-norm']がより効率的です。

アップデート

テスト用にxmlstartletをダウンロードしましたが、正常に動作しますが、str要素全体が返されます。テキストのみが必要な場合text()は、XPathの最後に追加します。

//*[str[@name='id']='http://localhost:8080/index.html']/str[@name='doc-norm']/text()

于 2011-05-20T20:00:09.723 に答える