2014-04-08 27 views
0

我试图设置所有元素的具有属性“布尔”的给定XML文件的值为True,我有一个地狱的时间计算如何做到这一点:将属性的所有元素设置为一个特定的值

$dom = new DOMDocument('1.0'); 
    $dom->preserveWhiteSpace = false; 
    $dom->formatOutput = true; 
    $dom->loadXML($sxe->asXML()); 
    $xpath = new DOMXPath($dom); 
    foreach ($xpath->query('//*[@type="Boolean"]') as $node) { 
      // something to set the value of $node to the value of "True" 
      } 
    echo $dom->saveXML(); 

我已经试过:

$node->{0} = value; // does not actually replace values but doesn't error 
$node[0] = value; // errors Cannot use object of type DOMElement as array 

此外,如果任何人都知道,我怎么能告诉DOM不输出使用简写的XML?

回答

1

你试图改变attribute值,所以使用setAttribute

foreach ($xpath->query('//*[@type="Boolean"]') as $node) { 
      $node->setAttribute('type', 'True'); 
      } 

更新:

foreach ($xpath->query('//*[@type="Boolean"]') as $node) { 
       $node->nodeValue = 'true'; 
       } 

为了您的空标签的问题,我假设这是产生这些标签ISN代码在你发布的内容中,但是当创建/添加新元素时,请使用空参数而不是完全删除它,即:

addChild('elementname', '') 

代替

addChild('elementname') 
+0

不,我想设置元素的值。属性仅用于查找要更改的元素。 – VikingBlooded

+0

哦,那么使用'$ node-> nodeValue = value' – JWiley

+0

正确,谢谢先生。你有没有机会知道如何告诉DOM输出XML而不使用简写XML标签? – VikingBlooded

相关问题