【问题标题】:PHP DOM: populating values in XML dataPHP DOM:在 XML 数据中填充值
【发布时间】:2011-07-06 18:23:22
【问题描述】:
$xml = new DOMDocument();
$xml_store_inventory = $xml->createElement('store-inventory');  // highest layer
$xml_item = $xml->createElement('item');
$xml_quantity = $xml->createElement('quantity');

$xml->appendChild($xml_store_inventory);
$xml_store_inventory->appendChild($xml_item);
$xml_location->appendChild($xml_quantity);

给予:

<?xml version="1.0"?>
<store-inventory>
  <item>
      <quantity></quantity>
  </item>
</store-inventory>

所以,我设法使用 DOM 在 PHP 中创建了上述内容。我一直在网上搜索如何“填充”,但我没有找到任何有关如何执行此操作的信息。

更具体地说,我希望它看起来像这样

<?xml version="1.0" encoding="UTF-8"?>
<store-inventory
xmlns="http://..."
xmlns:xsi="http://..."
xsi:schemaLocation="http://...">

    <item item-id="abcd">
       <quantity>0</quantity>
    </item>
</store-inventory>

所以,我想添加/更改以下内容:

  1. 更改 XML 版本行以包括编码(刮掉这个,我想通了 --> $xml = new DOMDocument('1.0', 'UTF-8');)
  2. 向元素添加附加信息。例如[item] 到 [item item-id="abcd"]
  3. 还有 [数量] 到 [数量]0[/数量]

有人可以帮我解决这个问题吗?蒂亚!

【问题讨论】:

  • 嗯,我刚刚注意到了。在对我以前的帖子进行了一些访问之后,它似乎是为了标记我的帖子的解决方案。我没有想到要这样做。对不起,我有点新。
  • 没问题,只是一个小提醒;)。我在您的问题中不明白的是:“1. 更改 XML 版本行以包含编码”我在 XML 中都看到了版本和编码。你想改变什么?
  • @hakre,上面的第三个代码块是我希望 XML 的样子。我已经更新了我的帖子,所以反映我已经弄清楚了 1。现在我需要弄清楚 2 和 3!
  • 我已经为 2 和 3 添加了答案。关于 UTF-8 编码:这是 XML 默认值,因此无需实际添加。但这样做也不是问题;)

标签: php xml dom populate


【解决方案1】:

你已经很接近了。

2:设置属性:

// set/add an attribute:
$xml_item->setAttribute('item-id', "abcd");

3:在添加标签/元素的同时添加数据:

// add an element with data:
$xml_quantity = $xml->createElement('quantity', '0');

2+:使用 HTMLSpecialchars 防止浏览器隐藏标签:

echo nl2br(html_specialchars($xml->saveXML(), ENT_QUOTES));

【讨论】:

  • 您好,感谢您的耐心等待!我刚刚还发现#2 查看 DOM 手册。我还在习惯这个“->”。这对我来说很奇怪。感谢您的帮助!
  • 实际上还有 2 个问题要问您:对于元素“store-inventory”,这些属性(xmlns、xmlns:xsi 等)是否仅在括号内用空格分隔?另外,有没有办法回显 $xml->saveXML();在浏览器上实际打印?我一直不得不“查看源代码”才能看到我的结果。
  • 不客气,很高兴我能帮助你。 -&gt; 用于访问对象的方法/函数和属性/变量。 DomDocument 的所有方法和属性在手册中都有解释。因此,当您已经在那里挖掘时,您就在正确的轨道上。开始使用 DomDocument 时,需要阅读很多内容,但使用的次数越多,它就会变得越容易。
  • 对于第二个附加问题,我已经更新了答案。对于第一个,我不清楚你的意思。我没有得到您问题中代码的名称空间声明。然而,默认情况下,它们都是它们自己的属性,所以用空格分隔。
  • 好极了。感谢您的快速响应!
猜你喜欢
  • 2019-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多