Command-Line
xmllint 在單次執行中顯示超過 1 個屬性的值
我正在使用 xmllint 解析具有多個標籤的 xml 文件,每個標籤都有多個屬性。範例結構如下圖:
<root> <child attr1="abc" attr2="def" attr3="ghi" /> ... ... </root>
我需要從屬性中獲取值
attr1
,attr2
並且attr3
。到目前為止,我已經嘗試了以下方法,它完美地給出了一個屬性的數據
echo 'cat //root/child/@attr1' | xmllint --shell data.xml
這個輸出
attr1="abc"
所以,我的問題是,我們如何在字元串中指定多個屬性來獲得所需的輸出為
attr1="abc" attr2="def" attr3="ghi"
我為此嘗試了以下方法,但沒有好的結果:
echo 'cat //root/child/@*[attr1|attr2|attr3]' | xmllint --shell data.xml echo 'cat //root/child/@*[attr1 or attr2 or attr3]' | xmllint --shell data.xml
上面的輸出是回顯語句再次被重新回顯,這意味著 xmllint 不接受它作為輸入。
關於如何解決這個問題的任何想法?
據我所知,
|
分隔符只能用於整個路徑:echo 'cat /root/child/@attr1|/root/child/@attr2|/root/child/@attr3' | xmllint --shell data.xml
(
//
在任何深度上,“//root”都意味著解析器需要做一些毫無意義的額外工作。假設您的範例 XML 看起來與真實的結構相似(因此 root 確實是 XML 的根節點),最好使用“/root/child ”。)或者,您可以使用帶有 XPath 函式的表達式:
echo 'cat /root/child/@*[name()="attr1" or name()="attr2" or name()="attr3"]' | xmllint --shell data.xml
如果您需要所有帶有“attr*”名稱的屬性,您可以使用通用表達式:
echo 'cat /root/child/@*[starts-with(name(),"attr")]' | xmllint --shell data.xml