0

I got Xml File

<user>
<prop name="A">
<sub name="X">
</sub>
</prop>
<prop name="B">
<sub name="Y">
</sub>
</prop>
</user>

I want to add $Xml=<design name="J" path="folder"></design>' in to sub name="Y". So It must be like.

<user>
<prop name="A">
<sub name="X">
</sub>
</prop>
<prop name="B">
<sub name="Y">
<design name="J" path="folder"></design>
</sub>
</prop>
</user>

How can I do it with using DOMDocument in php ?

4

1 回答 1

0

您可以使用DomXPath执行此操作并查询<sub>具有特定属性值的元素,例如//sub[@name="Y"]

示例http://3v4l.org/VQv5k

$data = '<user><prop name="A"><sub name="X"></sub></prop><prop name="B"><sub name="Y"></sub></prop></user>';
$xml = new DomDocument;
$xml->loadXML($data);

//create a xpath instance
$xpath = new DomXpath($xml);

//query for <sub name="Y"> and use the first found item
$subY = $xpath->query('//sub[@name="Y"]')->item(0);

//create <design> element
$design = $xml->createElement('design');
//add attributes
$design->setAttribute('name', 'J');
$design->setAttribute('path', 'folder');
//append it to the found <sub> element
$subY->appendChild($design);


//optional format output 
$xml->formatOutput = true;
$xml->preserveWhiteSpace = false;

//output XML
echo $xml->saveXML();

会导致:

<?xml version="1.0"?>
<user>
  <prop name="A">
    <sub name="X"/>
  </prop>
  <prop name="B">
    <sub name="Y">
      <design name="J" path="folder"/>
    </sub>
  </prop>
</user>
于 2013-10-10T08:48:44.720 回答