簡體   English   中英

如何使用PHP(即SimpleXmlElement)從XML數據中提取所有文本?

[英]How can I extract all text from XML data using PHP (i.e. SimpleXmlElement)?

這是我的XML數據:

$data = '<title>Report of the <org reg="International Foo and Bar Conference, 5th">Fifth International Foo and Bar Conference</org>, <org>Foobar Hall</org>, London, July 14 to 16, 1908.</title>'; 

我可以加載它:

$xml = simplexml_load_string( $data ); 
print_r( $xml );

返回:

SimpleXMLElement Object (
    [org] => Array (
        [0] => Fifth International Foo and Bar Conference
        [1] => Foobar Hall ) )

但是現在我可以嘗試再次將其放入字符串中:

$flat = (string) $xml;
print_r( $flat ); 

這就是我所看到的:

Report of the , , London, July 14 to 16, 1908.

但我寧願是這樣的:

Report of the Fifth International Foo and Bar Conference, Foobar Hall, London, July 14 to 16, 1908.

有沒有一種簡便的方法可以用PHP做到這一點,而無需顯式地遍歷每個節點? 也就是說,有沒有一種方法可以使XML扁平化,並從中提取所有文本,而不管標簽如何?

這可以在DOM中輕松完成。 DOM元素節點具有屬性$ textContent,它將返回其文本內容,包括所有后代文本節點。

$document = new DOMDocument();
$document->loadXml($data);
var_dump($document->documentElement->textContent);

輸出:

string(99) "Report of the Fifth International Foo and Bar Conference, Foobar Hall, London, July 14 to 16, 1908."

如果尚未在變量中包含element節點,則使用XPath會更加方便。

$document = new DOMDocument();
$document->loadXml($data);
$xpath = new DOMXpath($document);
var_dump($xpath->evaluate('string(/title)'));

甚至可以將SimpleXMLElement轉換為DOM元素節點。

$element = new SimpleXMLElement($data);
$node = dom_import_simplexml($element);
var_dump($node->textContent);

SimpleXMLElement上的__toString的文檔說:“返回直接在此元素中的文本內容。不返回此元素的子元素中的文本內容。”

asXML方法似乎更適合您的需求: http : //php.net/manual/en/simplexmlelement.asxml.php

它將返回一個字符串:

"<?xml version="1.0"?> <title>Report of the <org reg="International Foo and Bar Conference, 5th">Fifth International Foo and Bar Conference</org>, <org>Foobar Hall</org>, London, July 14 to 16, 1908.</title> "

https://eval.in/410230

盡管您必須刪除開頭的XML標簽,但這要好得多。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM