gpt4 book ai didi

xml - 如何在xpath包含函数中使用两个xpath

转载 作者:行者123 更新时间:2023-12-03 17:19:43 26 4
gpt4 key购买 nike

我有一个下拉框,如下所示:

<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>


并有另一个div显示产品名称,例如“金奶油/棕色渐变”。

现在,我需要通过定义XPath表达式来获取选项值=“ B002VYJB5S”,该表达式将根据选项标题属性检查该产品名称div。像这样:

<xpath expression="//select[@name='childVariationASIN']/option[@value!='' and @title[contains(//div[@id='selected_product_name']/text()) " >


此“包含”部分无效。如何获得相应的选项值“ B002VYJB5S”?

我不确定xpath表达式是否正确

谢谢
内存

最佳答案

像这样:

<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的子节点,而只是其后代。

要么, ...

更新:OP现在向我们展示了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字符-但它们不包含在我们要选择的 title元素的 option属性中。

标准的XPath函数 normalize-space()除其他外,从字符串中删除所有开始和结尾的空格-我们使用它,其结果实际上包含在 title元素的 option属性中。

关于xml - 如何在xpath包含函数中使用两个xpath,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5307873/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com