【问题标题】:Editing new attribute to XML element using DOMDocument in PHP在 PHP 中使用 DOMDocument 编辑 XML 元素的新属性
【发布时间】:2016-03-23 11:37:31
【问题描述】:

我目前在我的 MVC 应用程序中有这个 XML 文档

<elements>   
   <element name="agents" path="admin/agents" scope="system">
       <folder function="model">models</folder>
       <folder function="controller">controllers</folder>
       <folder function="view">views</folder>
   </element> 
</elements>

我想使用 DOMDocument 为元素添加额外的“visibility=hidden”属性。如何做到这一点?

【问题讨论】:

    标签: php xml domdocument


    【解决方案1】:

    使用createAttribute(),例如:

    $raw = <<<XML
    <elements>   
       <element name="agents" path="admin/agents" scope="system">
           <folder function="model">models</folder>
           <folder function="controller">controllers</folder>
           <folder function="view">views</folder>
       </element> 
    </elements>
    XML;
    $doc = new DOMDocument();
    $doc->loadXML($raw);
    
    $visibility = $doc->createAttribute('visiblity');
    $visibility->value = 'hidden';
    
    $element = $doc->getElementsByTagName('element')->item(0);
    $element->appendChild($visibility);
    echo $doc->saveXML();
    

    eval.in demo

    输出:

    <?xml version="1.0"?>
    <elements>   
       <element name="agents" path="admin/agents" scope="system" visiblity="hidden">
           <folder function="model">models</folder>
           <folder function="controller">controllers</folder>
           <folder function="view">views</folder>
       </element> 
    </elements>
    

    【讨论】:

      【解决方案2】:

      大多数人为此使用DOMElement::setAttribute()DOMElement::setAttributeNS() 方法。

      $xml = <<<XML
      <elements>   
         <element name="agents" path="admin/agents" scope="system"> 
           ...
         </element> 
      </elements>
      XML;
      
      $document = new DOMDocument();
      $document->loadXML($xml);
      $xpath = new DOMXpath($document);
      
      foreach ($xpath->evaluate('//element[1]') as $element) {
        $element->setAttribute('visibility', 'hidden');
      }
      echo $document->saveXML();
      

      输出:

      <?xml version="1.0"?>
      <elements>   
         <element name="agents" path="admin/agents" scope="system" visibility="hidden"> 
           ...
         </element> 
      </elements>
      

      不过,属性也是节点。因此,您可以使用DOMDocument::createAttribute() 创建它们并使用DOMElement::setAttributeNode() 进行设置。这允许将创建与分配分开。

      foreach ($xpath->evaluate('//element[1]') as $element) {
        $attribute = $document->createAttribute('visibility');
        $attribute->value = 'hidden';
        $element->setAttributeNode($attribute);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-11-22
        • 2014-10-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-11
        • 1970-01-01
        • 2014-04-06
        相关资源
        最近更新 更多