【发布时间】:2018-04-15 15:29:20
【问题描述】:
嘿,我正在尝试在 XML 文件中搜索指定的数字。之后我想扩展文件。我希望文件看起来像这样。
原始文件如下所示。
<products>
<product>
<OrderingInfo>
<item name="Part No.">12345 (text)</item>
<item name="Part No.">12345IP (text)</item>
</OrderingInfo>
<varitems>
</varitems>
</product>
<product>
<OrderingInfo>
<item name="Part No.">001 (text)</item>
<item name="Part No.">002 (text)</item>
</OrderingInfo>
<varitems>
</varitems>
</product>
</products>
我想要的输出:
<products>
<product>
<OrderingInfo>
<item name="Part No.">12345 (text)</item>
<item name="Part No.">12345IP (text)</item>
</OrderingInfo>
<varitems>
<item>
<varno>14205</varno>
<text>text</text>
</item>
<item>
<varno>14205IP</varno>
<text>text</text>
</item>
</varitems>
</product>
<product>
<OrderingInfo>
<item name="Part No.">001</item>
<item name="Part No.">002</item>
</OrderingInfo>
<varitems>
<item>
<varno>001</varno>
</item>
<item>
<varno>002</varno>
</item>
</varitems>
</product>
</products>
首先,我进入第一个产品并获取 OrderingInfo 的值。然后尝试用一个新的孩子来拯救他们。但它说:
在 null 上调用成员函数 addChild()"
在那一行:
$sxml->product[$i]->varitems->item[$l]->addChild('varno', $ordernr[0]);
但是,当我这样做时(由产品留下[$i]):
$sxml->product->varitems->item[$l]->addChild('varno', $ordernr[0]);
它有效,但首先添加了所有内容。
我完全没有想法。希望有人能帮帮我谢谢!
$xml = simplexml_load_file("OriginalFile.xml") or die("Error: Cannot create object"); $sxml = new SimpleXMLElement($xml->asXML());
for ($i = 0; $i < $XMLlenght; $i++) {
$length = count($xml->product[$i]->OrderingInfo->item);
for ($l = 0; $l < $length; $l++) {
$sxml->product->varitems->addChild("item");
$searchpattern = '/[0-9]*$/';
preg_match($searchpattern, $xml->product[$i]->OrderingInfo->item[$l], $ordernr);
if ($varnr[0] != '') {
$sxml->product[$i]->varitems->item[$l]->addChild('varno', $ordernr[0]);
}
}
【问题讨论】:
-
原始 XML 文件看起来如何?
-
我添加了原始文件
-
太棒了!请发布更完整的代码,尤其是变量赋值。 $sxml 是什么?与 $xml? 相同