简体   繁体   中英

PHP: How to change part of XML using DomElement

I am trying to make a function that changes part of an XML using XPath. I used part of someone else post:

/*********************************************************************
Function to replace part of an XML
**********************************************************************/
function replacePartofXML($element, $methodName, $methodValue, $xml, $newPartofXML)
{
    $xpathstring = "//" . $element . "[@$methodName = \"$methodValue\"]";
    $xml->xpath($xpathstring);

    //$domToChange = dom_import_simplexml($xml->xpath($xpathstring));
    $domToChange = dom_import_simplexml($xml);
    $domReplace  = dom_import_simplexml($newPartofXML);
    $nodeImport  = $domToChange->ownerDocument->importNode($domReplace, TRUE);
    $domToChange->parentNode->replaceChild($nodeImport, $domToChange);

    return($xml);
}

What I want to do is return the appended XML. I can't use dom_import_simplexml($xml->node->node) as my XML has many repeating element (but they have different ID reason why I am trying to use xpath)

The commented line does not work either as xpath returns an array and dom_import_simplexml is cannot import arrays.

Thanks for you input

You can take the first element returned by xpath() in case you believe the target element is unique (no-element-returned checking omitted) :

$domToChange = dom_import_simplexml($xml->xpath($xpathstring)[0]);

or iterate through the return value of xpath() and replace one by one.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM