2017-07-15 7 views
0

私は、ユーザが与えられたドキュメントからソースデータとして使うXPathクエリを書くアプリケーションを持っています。場合によっては、要素の内容だけが必要な場合もあれば、要素全体が必要な場合もあります。私の理解では、クエリの最後にtext()またはnode()のどちらかを指定して、どの動作を選択できるようにする必要があります。PHP SimpleXMLElement:saveXML()またはouterHTML(int)を使用してinnertextを取得できますか?

しかし、SimpleXMLElementから文字列を取得する方法は、クエリに関係なく動作を決定するようです。

私は(文字列)にクエリをキャストするとき、常に内側のXMLだけを返します。

(string) $xml->xpath('//document/head/Keywords')[0] === 
(string) $xml->xpath('//document/head/Keywords/node()')[0] === 
(string) $xml->xpath('//document/head/Keywords/text()')[0] === 
'17'; 

- > saveXML()を使用すると、常にタグ全体が返されます。

$xml->xpath('//document/head/Keywords')[0]->asXML() === 
$xml->xpath('//document/head/Keywords/node()')[0]->asXML() === 
$xml->xpath('//document/head/Keywords/text()')[0]->asXML() === 
'<Keywords topic="611x27keqj">17</Keywords>'; 

私は、ユーザーが自分のXPathクエリの一部として外側のXML対インナー指定することを可能にする文字列を取得することができ、単一の方法はありますか?

+0

[PHP(つまりSimpleXmlElement)を使用してXMLデータからすべてのテキストを抽出するにはどうすればよいですか?](https://stackoverflow.com/questions/31766136/how-can-i-extract-all-text-from) -xml-data-using-php-ie-simplexmlelement) – ThW

答えて

0

SimpleXML xpath()メソッドは、常に要素または属性のいずれかを表すSimpleXMLElementオブジェクトを返します。質問に表示されるメソッドは、そのオブジェクトを使用してテキストコンテンツまたは完全なXMLを取得する正しい方法です。

さらに豊富な(ただし単純ではない)XPath機能を使用するには、the DOM、具体的にはthe DOMXPath classを使用する必要があります。 simplexml_import_domdom_import_simplexmlを使ってSimpleXMLとDOMを自由に混在させることができます。内部表現は同じなので、最小限のコストで2つの「ラッパー」を切り替えることができます。

関連する問題