Beispiel #1
0
Datei: Xml.php Projekt: dafik/dfi
 /**
  * @param SimpleXMLElement $xml
  * @param $xpathQuery
  * @param $value
  * @param bool $returnAsString
  * @return object|SimpleXMLElement|string
  * @throws Exception
  */
 public function setDataByXpath(SimpleXMLElement $xml, $xpathQuery, $value, $returnAsString = false)
 {
     if ($value) {
         if (!$xml) {
             $xml = simplexml_load_string(Dfi_Xml::from_array(array()));
         }
         $elements = $xml->xpath($xpathQuery);
         if ($elements && count($elements) > 0) {
             if (count($elements) > 1) {
                 throw new Exception('multiple elements found dont know which update');
             } else {
                 $element = $elements[0];
                 /* @var $element SimpleXMLElement */
                 $val = (string) $element;
                 if ($value != $val) {
                     dom_import_simplexml($element)->nodeValue = $value;
                 }
             }
         } else {
             $parts = explode('/', $xpathQuery);
             $last = array_pop($parts);
             $xml->{$last} = $value;
         }
         if ($returnAsString) {
             return self::checkIsValidXmlStirng($xml->asXML());
         }
     }
     return $xml;
 }