2014-11-14 55 views
1

我需要在Bash腳本中獲取一些超級引用。如何將string()函數應用於每個屬性?

以下命令使用curlxmllint讀取HTML頁面的所有href屬性:

curl --silent -L google.com | xmllint --html --xpath '//a/@href' - 

但我需要的屬性的唯一值。可以使用string()函數來選擇屬性的值。但是,如果使用它,我只得到的屬性列表的第一個元素:

curl --silent -L google.com | xmllint --html --xpath 'string(//a/@href)' - 

如何申請在該string()功能,每個屬性?

+0

with xpath 2它會是'// a/@ href/string()',但它在xmllint(尚未)中不可用 – 2014-11-14 15:29:37

回答

0

你可以這樣做(請注意在XPath表達式的區別):

curl --silent -L google.com | xmllint --html --xpath '//a/@*'

,然後添加其他管道輸出發送到sed,過濾掉屬性名稱得到你想要的值。但這是從文檔中提取東西的一種奇怪方式。

+0

爲什麼我應該發送比hrefs更多的屬性到sed?順便說一句,我已經使用了sed解決方法,但是這樣做很難正確處理嵌套的單引號和雙引號。我希望獲得更好的基於XPath的解決方案。 – ceving 2014-11-15 10:21:50

+0

沒有關於附加屬性 - 我想我被你的問題的措辭弄糊塗了。如果你想要一個更好的解決方案,我強烈建議你寫一個快速的Python腳本來做你想做的事情,而不是使用xmllint(在這種情況下我會說這不是很好)。讓我知道你是否想看到一些示例代碼開始。 – JKesMc9tqIQe9M 2014-11-15 15:55:04

+0

我不知道Python,我認爲在Solaris 10服務器上必須使用Python可能不可用。 – ceving 2014-11-15 16:13:37

相關問題