2016-11-11 25 views
1

我有一個xml導出需要在導入之前進行篩選。PHP篩選XML xpath並導出圖像

所以我寫了代碼來加載,過濾和保存它。

$xml = simplexml_load_file('test.xml'); 
$nodes = $xml->xpath('/nodes/node[ ... condition ... ]'); 

$nodes->asXML('filtred.xml'); 

但我看到asXML()SimpleXMLElement::function那就是SimpleXMLElement元素的對象。

如何將$nodes中的所有SimpleXMLElement元素分組使用asXML()就可以了?

原始XML結構爲:

<nodes> 
    <node> 
    <Titolo>Acquisti</Titolo> 
    <Corpo></Corpo> 
    <Nid>450</Nid> 
    </node> 

    ... 

</nodes> 
+0

我來包梁've found this http://stackoverflow.com/questions/3418019/simplexml-append-one-tree-to-another – cske

+0

我告訴過你的問題是$ nodes是一個數組而不是SimpleXMLElement元素..所以我canìt使用SimpleXMLElement :: function,如'importNode'或'appendChild' – Shyghar

回答

0

基於SimpleXML: append one tree to another,你的結果是一個節點列表中的那些必須由根元素上,您可以撥打asXml

$xmlIn = ' 
<nodes> 
    <node> 
    <Titolo>Acquisti</Titolo> 
    <Corpo></Corpo> 
    <Nid>450</Nid> 
    </node> 
    <node> 
    <Titolo>Acquisti 2</Titolo> 
    <Corpo></Corpo> 
    <Nid>450</Nid> 
    </node> 
    <node> 
    <Titolo>Acquisti 2</Titolo> 
    <Corpo></Corpo> 
    <Nid>450</Nid> 
    </node> 
</nodes> 
'; 

$xml = simplexml_load_string($xmlIn); 
$nodes = $xml->xpath('/nodes/node'); 

$xmlOut = new SimpleXMLElement('<nodes></nodes>'); 

$domOut = dom_import_simplexml($xmlOut); 

foreach ($nodes as $n) { 
    $tmp = dom_import_simplexml($n); 
    $tmp = $domOut->ownerDocument->importNode($tmp, TRUE); 
    $domOut->appendChild($tmp); 
} 

$xmlOut->asXML('filtred.xml');