【问题标题】:Setting all elements with attribute to a certain value将所有具有属性的元素设置为某个值
【发布时间】:2014-04-08 17:00:33
【问题描述】:

我正在尝试将具有属性“Boolean”的给定 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?

【问题讨论】:

    标签: php dom xpath simplexml


    【解决方案1】:

    您正在尝试更改 attribute 的值,因此请使用 setAttribute

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

    更新:

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

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

    addChild('elementname', '')
    

    而不是

    addChild('elementname')
    

    【讨论】:

    • 不,我正在尝试设置元素的值。属性仅用于查找要更改的元素。
    • 哦,在这种情况下使用$node->nodeValue = value
    • 正确,谢谢先生。您是否知道如何告诉 DOM 在不使用速记 xml 标签的情况下输出 XML?
    • 不确定你的意思,你能详细说明一下吗?
    • 当 DOM 吐出新的 XML 时,它使用 XML 短标签:() 表示空元素。出于某种奇怪的原因,为此项目构建的更新程序应用程序实际上需要完整的 版本。有没有办法向 DOM 声明不使用短标签?
    猜你喜欢
    • 1970-01-01
    • 2011-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-22
    • 1970-01-01
    相关资源
    最近更新 更多