PHP过滤XML xpath并导出图像

时间:2016-11-11 17:02:01

标签: php xml xpath simplexml

我有一个xml导出,在导入之前需要进行过滤。

所以我编写了加载,过滤和保存代码的代码。

$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>

1 个答案:

答案 0 :(得分: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');