gpt4 book ai didi

xpath - 如何制定此 xpath 表达式?

转载 作者:行者123 更新时间:2023-12-03 15:52:00 24 4
gpt4 key购买 nike

给定以下 div 元素

<div class="info">
<a href="/s/xyz.html" class="title">title</a>
<span class="a">123</span>
<span class="b">456</span>
<span class="c">789</span>
</div>

我想检索具有类“b”的跨度的内容。但是,我要解析的某些 div 缺少后两个跨度(类“b”和“c”)。对于这些 div,我想要具有类“a”的跨度的内容。是否可以创建单个 XPath 表达式来选择它?

如果不可能,是否可以创建一个选择器来检索 div 的全部内容?即检索

<a href="/s/xyz.html" class="title">title</a>
<span class="a">123</span>
<span class="b">456</span>
<span class="c">789</span>

如果可以的话,我可以使用正则表达式来查找我想要的数据。 (我可以选择 div 中的文本,但我也不确定如何选择标签。只有文本产生 123456789。)

最佳答案

更高效——不需要联合:

   //div/span
[@class='b'
or
@class='a'
and
not(parent::*[span[@class='b']])
]

一个表达式(如下所示)是两个绝对“//表达式的联合”,通常执行两次完整的文档树遍历,然后联合操作按文档顺序进行去重和排序-- 除非 XPath 处理器具有智能优化器,否则所有这些都可能比单个树遍历效率低得多。

这种低效表达的一个例子:

//div/span[@class='b'] | //div[not(./span[@class='b'])]/span[@class='a'] 

基于 XSLT 的验证:

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>

<xsl:template match="/">
<xsl:copy-of select=
"//div/span
[@class='b'
or
@class='a'
and
not(parent::*[span[@class='b']])
]"/>
</xsl:template>
</xsl:stylesheet>

当此转换应用于提供的 XML 文档时:

<div class="info">
<a href="/s/xyz.html" class="title">title</a>
<span class="a">123</span>
<span class="b">456</span>
<span class="c">789</span>
</div>

计算 Xpath 表达式并将所选元素(在本例中只有一个)复制到输出:

<span class="b">456</span>

当相同的转换应用于不同的 XML 文档时,其中没有 class='b':

<div class="info">
<a href="/s/xyz.html" class="title">title</a>
<span class="a">123</span>
<span class="x">456</span>
<span class="c">789</span>
</div>

计算相同的 XPath 表达式并将正确选择的元素复制到输出:

<span class="a">123</span>

关于xpath - 如何制定此 xpath 表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11440100/

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