菜鸟教程小白 发表于 2022-12-12 17:26:47

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


                                            <p><p>我想知道如何使用 <a href="https://github.com/topfunky/hpple" rel="noreferrer noopener nofollow">this (Hpple)</a> 解析 HTMLblock 的内容,同时保持字符串在 HTML 文档中出现的顺序。与 XPath 表达式一起使用的包装器。环境是iOS。</p>

<p>例子:</p>

<pre><code>&lt;html&gt;
&lt;body&gt;
&lt;div&gt;
Lorem ipsum &lt;a href=&#34;...&#34;&gt;dolor&lt;/a&gt; sit &lt;b&gt;amet,&lt;/b&gt; consectetur
&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;
</code></pre>

<p>假设我们要按原始顺序解析 <code><div></code> 标签内的所有字符串,以便得到这样的结果:</p>

<pre><code>Lorem ipsum dolor sit amet, consectetur
</code></pre>

<p>这个问题的症结在于维持字符串的顺序。 <code><div></code>以及<code><a></code>和<code><b></code>的所有直接内容分别或同时获取很容易使用 XPath 表达式时会忽略顺序,因此可能会导致将 <code><a></code> 和 <code><b></code> 的内容放在字符串的末尾。</p >

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

<p><strong>更新:</strong></p>

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

<pre><code>//div/descendant-or-self::*/text()
</code></pre>

<p>但是,生成的元素是分开的,不是作为一个字符串传递的,因此必须手动连接它们。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p><strong>如果 Hpple 是兼容的 XPath 引擎,那么它必须能够评估此表达式</strong>:</p>

<pre><code>string(/*/body/div)
</code></pre>

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

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

<p><strong>基于 XSLT 的验证</strong>:</p>

<p><strong>这种转变</strong>:</p>

<pre><code>&lt;xsl:stylesheet version=&#34;1.0&#34;
xmlns:xsl=&#34;http://www.w3.org/1999/XSL/Transform&#34;&gt;
&lt;xsl:output method=&#34;text&#34;/&gt;

&lt;xsl:template match=&#34;/&#34;&gt;
&lt;xsl:value-of select=&#34;/*/body/div&#34;/&gt;
&lt;/xsl:template&gt;
&lt;/xsl:stylesheet&gt;
</code></pre>

<p><strong>应用于提供的 XML 文档时</strong>:</p>

<pre><code>&lt;html&gt;
    &lt;body&gt;
      &lt;div&gt; Lorem ipsum
            &lt;a href=&#34;...&#34;&gt;dolor&lt;/a&gt; sit
            &lt;b&gt;amet,&lt;/b&gt; consectetur
      &lt;/div&gt;
    &lt;/body&gt;
&lt;/html&gt;
</code></pre>

<p><strong>产生想要的正确结果</strong>:</p>

<pre><code> Lorem ipsum
            dolor sit
            amet, consectetur
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于iphone - 按原始顺序解析/组合嵌套的 HTML 元素值,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/7340030/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/7340030/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: iphone - 按原始顺序解析/组合嵌套的 HTML 元素值