2016-03-26 60 views
-1

我使用此代码xml_encode我的数组。php xml_encode将属性设置为特定的标记名

public function xml_encode($mixed, $domElement=null, $DOMDocument=null) { 
    if (is_null($DOMDocument)) { 
     $DOMDocument =new DOMDocument; 
     $DOMDocument->formatOutput = true; 
     $this->xml_encode($mixed, $DOMDocument, $DOMDocument); 
     echo $DOMDocument->saveXML(); 
    } 
    else { 
     // To cope with embedded objects 
     if (is_object($mixed)) { 
      $mixed = get_object_vars($mixed); 
     } 
     if (is_array($mixed)) { 
      foreach ($mixed as $index => $mixedElement) { 
       if (is_int($index)) { 
        if ($index === 0) { 
         $node = $domElement; 
        } 
        else { 
         $node = $DOMDocument->createElement($domElement->tagName); 
         $domElement->parentNode->appendChild($node); 
        } 
       } 
       else { 
        $plural = $DOMDocument->createElement($index); 
        $domElement->appendChild($plural); 
        $node = $plural; 
        if (!(rtrim($index, 's') === $index)) { 
         $singular = $DOMDocument->createElement(rtrim($index, 's')); 
         $plural->appendChild($singular); 
         $node = $singular; 
        } 
       } 

       $this->xml_encode($mixedElement, $node, $DOMDocument); 
      } 
     } 
     else { 
      $mixed = is_bool($mixed) ? ($mixed ? 'true' : 'false') : $mixed; 
      $domElement->appendChild($DOMDocument->createTextNode($mixed)); 
     } 
    } 
} 

https://www.darklaunch.com/2009/05/23/php-xml-encode-using-domdocument-convert-array-to-xml-json-encode

,而且运作良好。现在,我想将属性设置为特定的标签。

比方说,这是我的xml。

<book> 
    <title>PHP Programming</title> 
    <description>Learn how to code in PHP</description> 
</book> 

我想要的属性设置为冠军标签,并使其

<title name=attributeValue> 
     PHP Programming 
</title> 

我怎样才能做到这一点?

谢谢!

回答

0

只是为了与大家分享,如果别人也有这样的问题。 我刚刚解决了我的问题。 在这部分

if (is_null($DOMDocument)) { 
     $DOMDocument =new DOMDocument; 
     $DOMDocument->formatOutput = true; 
     $this->xml_encode($mixed, $DOMDocument, $DOMDocument); 
     //echo $DOMDocument->saveXML(); 
     return $DOMDocument; 
    } 

我返回$ DOM文档。然后我做了这个

$xml = $this->xml_encode($data); 
    $xmlstring = $xml->saveXML(); 
     $dom = new DOMDocument(); 
     $dom->loadXML($xmlstring); 

     foreach ($dom->getElementsByTagName('title') as $item) { 
      $item->setAttribute('name', 'attributeValue'); 
      echo $dom->saveXML(); 
     } 

我得到了正确的结果。

相关问题