1

XPathを使用してデータを抽出するときにテキストの書式を維持する方法を知っている人はいますか?

現在、すべてのブロックを抽出しています

<div class="info"> <h5>title</h5> text <a href="somelink">anchor</a> </div>

ページから。問題は、nodeValue にアクセスすると、プレーン テキストしか取得できないことです。コード内の h5 や静止画など、書式設定を含むコンテンツをキャプチャするにはどうすればよいですか?

前もって感謝します。Googleで考えられるすべての組み合わせを検索しましたが、運がありません.

4

5 に答える 5

1

Ciaran McNulty の回答に追加したいと思います

次のように SimpleXml でも同じことができます。

$simplexml->node->asXml(); // saveXml() is now an alias

そして、引用を拡張するには

要素の NodeValue は、構造化された XML ではなく、実際にはテキスト値です。

ノードは次のように考えることができます。

<div class="info">
    <__toString()> </__toString()>
    <h5>title</h5>
    <__toString()> text </__toString()>
    <a href="somelink">anchor</a>
    <__toString()> </__toString()>
</div>

への呼び出しは、__toString() 要素のみを取得する$element->nodeValue呼び出しに似ています。$element->__toString()私が作成した想像上の__toString()ものは、公式には として定義されていXML_TEXT_NODEます。

于 2009-01-08T09:42:25.613 に答える
1

XPath 言語は、別の言語 (DOM API、XSLT、XQuery など) に埋め込むように設計されており、スタンドアロンで使用することはできません。元の質問では、目的の埋め込みが何であるかを指定していません。

以下は、XPath がXSLTに組み込まれている場合の非常に単純で短い解決策です。

この変換:

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

    <xsl:template match="div[@class='info']">
       <xsl:copy-of select="."/>
    </xsl:template>
</xsl:stylesheet>

この xml ドキュメントに適用した場合:

<html>
    <body>
        <div class="info">
            <h1>title1</h1> text1
            <a href="somelink1">anchor1</a>
        </div>
        Something else here
        <div class="info">
            <h2>title2</h2> text2
            <a href="somelink2">anchor2</a>
        </div>
        Something else here
        <div class="info">
            <h3>title3</h3> text3
            <a href="somelink3">anchor3</a>
        </div>
    </body>
</html>

必要な結果を生成します:

<div class="info">
  <h1>title1</h1> text1
    <a href="somelink1">anchor1</a>
</div>
        Something else here
<div class="info">
  <h2>title2</h2> text2
  <a href="somelink2">anchor2</a>
</div>
        Something else here
<div class="info">
  <h3>title3</h3> text3
  <a href="somelink3">anchor3</a>
</div>
于 2009-01-10T21:14:59.623 に答える
0

div/node()トリックを行う必要があります。

入力例:

<div class="info">
  some <h5>title</h5> text <a href="somelink">anchor</a> more text
</div>

XSLT スタイルシートの例:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
        <newtag>
                <xsl:copy-of select="div/node()"/>
        </newtag>
</xsl:template>

</xsl:stylesheet>

出力例:

<?xml version="1.0" encoding="utf-8"?>
<newtag> some<h5>title</h5> text <a href="somelink">anchor</a> more text</newtag>
于 2009-01-07T13:54:02.580 に答える