1

私が持っているとしましょう

<body>
    <p>This is a paragraph</p>
    <p>This is another paragraph, there are three paragraphs in this page</p>
    <p>Lorem ipsum dolor sit amet. Just another paragraph. Ut enim ad minim veniam.</p>
</body>

'paragraph'に一致するすべての単語を検索し、一致する単語の前後に4つの単語で囲みます。結果のリストは次のようになります。

  • これは段落です。
  • これは別の段落です、3つの段落があります...
  • ...段落、このページには3つの段落があります。
  • ...座ってください。ちょうど別の段落。Ut enim ad minim .. ..

私はxpathを初めて使用するので、私ができる最善のことは、「段落」を含むすべてのテキストノードを取得するこのコードです。

$test = $xml->xpath('//body//*[text()[contains(.,"paragraph")]]');

結果:

  • これは段落です
  • これは別の段落です。このページには3つの段落があります
  • Loremipsumdolorはアメットに座っています。ちょうど別の段落。Ut enim adminimveniam。

前もって感謝します。

4

1 に答える 1

2

PHPについて言及しているという事実は、おそらくXPath1.0ソリューションを探していることを示唆しています。

ここでいくつかの問題:

  • XPath 1.0には優れたテキスト処理機能がなく、ユーザー定義関数でそれらを補うことはできません。

    XPath(1.0または2.0)は新しいノードを作成できないため、構造化された結果を返すのが困難です。

PHP、つまりXPath 1.0に固執している場合は、一致するテキストノードをPHPアプリケーションに返し、残りの処理をPHPで実行することに満足していると思います。

別の方法はXSLTを使用することです。XSLT1.0ではまだ課題ですが、再帰的なテンプレートを使用すれば、それは確かに可能です。

于 2012-05-22T12:57:16.327 に答える