2

XPath 式で動作するこの (Hpple)ラッパーを使用して、HTML ブロックのコンテンツを解析すると同時に、HTML ドキュメントに表示される文字列の順序を維持する方法を知りたいです。環境は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

これの難点は、文字列の順序を維持することです。XPath 式を使用して、 and<div>だけでなく、 andのすべての直接コンテンツを個別に、または同時に取得するのは簡単ですが、順序が省略されているため、andのコンテンツが文字列の最後に配置される可能性があります。<a><b><a><b>

上記のラッパーで XPath 式を使用してこれをどのように達成できますか?

アップデート:

前述のラッパーとプラットフォーム (特に libxml2) を使用してこれを実現する 1 つの方法は、次の XPath 式のようです。

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

ただし、結果の要素は分離され、1 つの文字列として配信されないため、手動で連結する必要があります。

4

1 に答える 1

4

Hpple が準拠する XPath エンジンである場合、次の式を評価できる必要があります

string(/*/body/div)

この XPath 式は、最初の文字列値に評価されます (ドキュメント順/*/body/div要素 (この場合、そのような要素は 1 つだけです))。

定義上、ノードの文字列値は、そのすべての子孫テキスト ノードを (ドキュメント順に) 連結したものであり、したがって、この結果はまさに要求した文字列です。

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 
于 2011-09-08T00:01:48.340 に答える