2016-03-23 1 views
1

я в настоящее время этот XML-документ в моем приложении MVCРедактирование новый атрибут XML элемента с использованием DOMDocument в 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> 

Я хотел бы добавить дополнительную «видимость = скрытый» атрибут к элементу с помощью DOMDocument. Как это может быть сделано?

ответ

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> 

 Смежные вопросы

  • Нет связанных вопросов^_^