事情是這樣的:
<xpath expression=
"//select[@ name='childVariationASIN']
/option[@value!=''
and
@title[contains(.,//div[@id='selected_product_name']/text())
" >
這種 「包含」 部分這麼想的工作。
沒有向我們展示針對的XPath表達式求值的XML文檔,我們只能儘量去猜測原因 ...
很可能
//div[@id='selected_product_name']/text()
選擇多個文本節點(如只有空白的文本節點),而想要的文本節點並不是第一個。
或者,想要的文本節點不是div
的孩子,而只是其後代。
或者,...
UPDATE:該任擇議定書已經向我們展示了XML文檔。
我們高興地瞬間發現並解決問題的XPath表達式:
//select[@ name='childVariationASIN']
/option[@value!=''
and
@title
[contains(.,normalize-space(//div[@id
=
'selected_product_name'
]
/text()
)
)
]
]
如果你不相信這個表達式選擇想要的節點,這裏是一個簡單的驗證嘗試:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="/">
<xsl:copy-of select=
" //select[@ name='childVariationASIN']
/option[@value!=''
and
@title
[contains(.,normalize-space(//div[@id
=
'selected_product_name'
]
/text()
)
)
]
]
"/>
</xsl:template>
</xsl:stylesheet>
當施加在提供的XML文檔:
<html>
<body>
<div class="dropdownlist">
<select name="childVariationASIN" style="width:180px;">
<option value="" selected="selected" title="Select">Select</option>
<option value="B002VYJB5S" title="59 mm :: 101/13 Gold-Cream/Brown Gradient">Gold-Cre...</option>
<option value="B00193CBMM" title="59 mm :: 103/11 Gunmetal-Grey/Grey Gradient">Gunmetal...</option>
<option value="B003ENRWHE" title="59 mm :: 103/13 Gunmetal-Grey/Brown">Gunmetal...</option>
</select>
</div>
<div id='selected_product_name'>
Gold-Cream/Brown Gradient
</div>
</body>
</html>
想要的,正確的結果產生:
<option value="B002VYJB5S"
title="59 mm :: 101/13 Gold-Cream/Brown Gradient">Gold-Cre...</option>
說明:
,我們希望我們選擇的節點包含div
元素的文本子節點是:
<div id='selected_product_name'>
Gold-Cream/Brown Gradient
</div>
正文:
"
Gold-Cream/Brown Gradient
"
顯然,它包含一個開始和結束NL人物 - 但它們並不包含在我們要選擇的option
元素的title
屬性。
標準XPath函數normalize-space()
,除其他事項外,從字符串中刪除所有的開始和結束的空白 - 我們使用它和它的結果真的包含在option
元素的title
屬性。
「@」和「name」之間的空格是否是拼寫錯誤? – 2011-03-15 05:49:50
這是我的錯字這裏只。包含函數只能不工作orelse你可以建議diff xpath表達式來獲得所需的選項值。請隨時詢問任何澄清。謝謝 – user659956 2011-03-15 05:54:44
@ user659956:我現在已經制定了最終的解決方案,並提供了廣泛的解釋。 – 2011-03-15 13:17:35