2016-03-23 17 views
1

Im Moment habe ich diese XML-Dokument in meine MVC-Anwendungbearbeiten neues Attribut XML-Element mit DOMDocument in 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> 

Ich mag würde zusätzliche „Sichtbarkeit = verborgen“ Attribut auf das Element hinzufügen mit DOMDocument. Wie kann das gemacht werden?

Antwort

0

meisten Leute benutzen dafür die Methode DOMElement::setAttribute() oder 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(); 

Ausgang:

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

jedoch Attribute Knoten sind, auch. Sie können sie also mit DOMDocument::createAttribute() erstellen und mit DOMElement::setAttributeNode() einstellen. Dies ermöglicht es, die Erstellung von der Zuweisung zu trennen.

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

Verwenden createAttribute(), zum Beispiel:

$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

Ausgang:

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