【问题标题】:Manipulating XML with Dom使用 Dom 操作 XML
【发布时间】:2014-07-24 03:20:13
【问题描述】:

我正在尝试通过添加一些自定义标签来操作 xml。

我设法在其上添加了一个自定义元素和一个 TextNode,但它在 XML 的最底部呈现。

如何将此自定义标签添加为另一个标签的子标签?我尝试使用以下代码:

$product_record = $xml->documentElement->getElementsByTagName('product_record');

然后

$text = $test->appendChild($product_record);

但它似乎不起作用。

这是我卡住的地方: http://viper-7.com/CsRNHU

如何让 test 标签在 product_record 中呈现?

谢谢, 泰雷兹

【问题讨论】:

    标签: php xml dom


    【解决方案1】:

    以您的完整示例为例,您将新元素添加到文档 itselt,而不是获取的节点。

    getElementsByTagName() 方法返回节点列表,而不是单个节点,因此您需要使用循环或从列表中获取特定元素。

    $xml = new DOMDocument();
    $xml->load($url);
    
    $products = $xml->documentElement->getElementsByTagName('product_record');
    
    foreach ($products as $product) {
      $test = $product
          ->appendChild($xml->createElement('test'))
          ->appendChild($xml->createTextNode("testing"));
    }
    
    echo $xml->saveXML();
    

    DOMDocument::create*() 方法创建特定节点并返回它们。 appendChild() 方法将其添加到父节点并返回添加的节点。

    您的示例返回一个 UTF-16 编码的 XML。如果要更改编码,请将其导入 UTF-8 XML 文档:

    $utf8 = new DOMDocument('1.0', 'UTF-8');
    $utf8->appendChild($utf8->importNode($xml->documentElement, TRUE));
    

    演示:http://viper-7.com/1eCPeo

    【讨论】:

    • 太棒了!它只是工作。为了更多地了解我可以用这个做什么。我尝试修改您的代码以在我正在创建的一个标签中显示 $product_id。当我得到这个工作时,我想从另一个 xml 中提取一个变量。目前,如果我尝试输入 product_id 则它不起作用。知道我在这里缺少什么吗? viper-7.com/RTbwly
    • getElementsByTagName() 返回元素列表,而不是单个产品 ID。使用 Xpath (DOMXpath::evaluate()) 从 XML DOM stackoverflow.com/…获取数据
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-23
    • 2016-08-31
    • 1970-01-01
    • 2019-11-02
    • 2018-06-13
    • 2010-10-24
    相关资源
    最近更新 更多