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

我的理解是xmlstarlet不完全支持xpath表達式。有沒有其他的命令行工具可以執行BTW?我該如何簡單地使用這個xpath,以便xmlstartlet能夠使用它?

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

你可以發佈相關的XML片斷呢? – Tomalak 2011-05-20 18:52:21

+0

@Tomalak - 完成 – simpatico 2011-05-20 18:55:54

+0

@Tomalak - 抱歉,試着張貼最短的示例。 – simpatico 2011-05-20 19:07:16

回答

2

您是否試圖從示例中返回6

我沒有xmlstarlet測試這個,但嘗試這個XPath:

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

這將返回具有name屬性與doc-norm值的str元素的值時,其父元素有一個子元素str具有id屬性的元素的值爲http://localhost:8080/index.html。 (我希望這是有道理的!)

我還應該補充說,如果您知道父元素的級別是什麼,請儘量避免使用//。類似/doc[str[@name='id']='http://localhost:8080/index.html']/str[@name='doc-norm']會更有效率。

UPDATE

我下載xmlstartlet測試並能正常工作,但它返回整個str元素。如果你只是想文本,添加text()到的XPath的末尾:

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

+0

+1爲一個很好的答案。我猜嵌套報價可能是OP問題的原因。 – 2011-05-22 01:59:25

相關問題