【问题标题】:PHP5 and DOM changing XML node attribute valuePHP5 和 DOM 改变 XML 节点属性值
【发布时间】:2012-05-05 01:43:08
【问题描述】:

拥有下一个 XML(Idatzi.xml):

<?xml version='1.0' encoding='ISO-8859-1'?>
<!DOCTYPE markables SYSTEM "markables.dtd">
<markables>
<markable id="markable_1" atrib="yes" span="word_1..word_4"> </markable>
<markable id="markable_2" atrib="no" span="word_6..word_7"> </markable>
<markable id="markable_3" atrib="yes" span="word_10..word_24"> </markable>
</markables>

还有下一个 PHP 代码:

<?php

$xmlIdatziDok = new DOMDocument();
if($xmlIdatziDok->load("Idatzi.xml") === FALSE){die('Error');}
$xPath_IdatziDok = new DOMXPath($xmlIdatziDok);

foreach ($xPath_IdatziDok->query('//markables/markable') AS $Idaztekoa)
{
  $IdaztekoaID = $Idaztekoa->getAttribute('id');
  $IdaztekoaAtrib = $Idaztekoa->getAttribute('atrib');

    if($IdaztekoaAtrib != "yes")
    {
      $Idazteko->Attribute('atrib') = "yes";      
    }
}

我想知道如何在PHP代码中正确编写下一行代码:

$Idazteko->Attribute('atrib') = "yes";

显然写错了。我想做的是将markable_2的“否”更改为“是”。有什么想法吗?

【问题讨论】:

    标签: php xml dom domdocument


    【解决方案1】:

    您可以在documentation 中找到此信息。

    $Idaztekoa->setAttribute('atrib', 'yes');
    

    【讨论】:

      【解决方案2】:

      使用 xpath 查询直接选择您想要更改和操作的所有属性:

      foreach($xp->query('/markables/markable/@atrib[. != "yes"]') as $attrib)
      {
          $attrib->nodeValue = 'yes';
      }
      

      然后完成。完整示例:

      $xml = <<<XML
      <?xml version='1.0' encoding='ISO-8859-1'?>
      <!DOCTYPE markables SYSTEM "markables.dtd">
      <markables>
          <markable id="markable_1" atrib="yes" span="word_1..word_4"> </markable>
          <markable id="markable_2" atrib="no" span="word_6..word_7"> </markable>
          <markable id="markable_3" atrib="yes" span="word_10..word_24"> </markable>
      </markables>
      XML;
      
      $doc = new DOMDocument();
      $doc->loadXML($xml);
      $xp = new DOMXPath($doc);
      
      foreach($xp->query('/markables/markable/@atrib[. != "yes"]') as $attrib)
      {
          $attrib->nodeValue = 'yes';
      }
      
      echo $doc->saveXML();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-12-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-24
        • 2021-12-24
        相关资源
        最近更新 更多