gpt4 book ai didi

iphone - 按原始顺序解析/组合嵌套的 HTML 元素值

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:51:35 25 4
gpt4 key购买 nike

我想知道如何解析 HTML block 的内容,同时使用 this (Hpple) 维持字符串在 HTML 文档中出现的顺序。与 XPath 表达式一起使用的包装器。环境为iOS。

例子:

<html>
<body>
<div>
Lorem ipsum <a href="...">dolor</a> sit <b>amet,</b> consectetur
</div>
</body>
</html>

假设我们要解析 <div> 中的所有字符串以原始顺序标记,以便我们得到此结果:

Lorem ipsum dolor sit amet, consectetur

关键在于维持字符串的顺序。 <div>的所有直接内容很容易得到以及 <a> 的和 <b>单独或同时使用 XPath 表达式,但它省略了顺序,因此可能会导致放置 <a> 的内容和 <b>在字符串的末尾。

如何使用带有上述包装器的 XPath 表达式来实现这一点?

更新:

使用上述包装器和平台(尤其是 libxml2)实现此目的的一种方法似乎是以下 XPath 表达式:

//div/descendant-or-self::*/text()

然而,生成的元素是分开的,而不是作为一个字符串传递,因此必须手动将它们连接起来。

最佳答案

如果 Hpple 是兼容 XPath 的引擎,那么它必须能够计算这个表达式:

string(/*/body/div)

此 XPath 表达式的计算结果为第一个(按文档顺序 /*/body/div 元素(在您的情况下只有一个这样的元素)的字符串值。

根据定义,节点的字符串值 是其所有后代文本节点(按文档顺序)的串联,因此该结果正是您请求的字符串。

基于 XSLT 的验证:

这个转换:

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>

<xsl:template match="/">
<xsl:value-of select="/*/body/div"/>
</xsl:template>
</xsl:stylesheet>

应用于提供的 XML 文档时:

<html>
<body>
<div> Lorem ipsum
<a href="...">dolor</a> sit
<b>amet,</b> consectetur
</div>
</body>
</html>

产生想要的、正确的结果:

 Lorem ipsum 
dolor sit
amet, consectetur

关于iphone - 按原始顺序解析/组合嵌套的 HTML 元素值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7340030/

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