在PHP

2016-03-23 32 views
1

使用DOM文檔編輯新屬性的XML元素我現在有這個XML文檔在我的MVC應用程序在PHP

<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> 

我想補充額外的「知名度=隱藏」屬性使用DOM文檔的元素。如何才能做到這一點?

回答

0

最人們使用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); 
} 
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>