【发布时间】:2015-03-03 00:37:30
【问题描述】:
给定一个基本 $xml 和一个包含 <something> 标记的文件,该标记具有属性、子项及其子项的子项,我想将其作为第一个子项附加,并将其所有子项附加为原始 XML。
原始 XML:
<root>
<people>
<person>
<name>John Doe</name>
<age>47</age>
</person>
<person>
<name>James Johnson</name>
<age>13</age>
</person>
</people>
</root>
文件中的 XML:
<something someval="x" otherthing="y">
<child attr="val" ..> { some children and values ... }</child>
<child attr="val2" ..> { some children and values ... }</child>
...
</something>
结果 XML:
<root>
<something someval="x" otherthing="y">
<child attr="val" ..> { some children and values ... }</child>
<child attr="val2" ..> { some children and values ... }</child>
...
</something>
<people>
<person>
<name>John Doe</name>
<age>47</age>
</person>
<person>
<name>James Johnson</name>
<age>13</age>
</person>
</people>
</root>
该标记将包含多个直接和递归的子标记,因此通过 SimpleXML 操作构建 XML 是不切实际的。此外,将其保存在文件中会降低维护成本。
从技术上讲,它只是预先添加 一个 孩子。问题是这个孩子会有其他孩子等等。
PHP addChild page 上有一条评论说:
$x = new SimpleXMLElement('<root name="toplevel"></root>');
$f1 = new SimpleXMLElement('<child pos="1">alpha</child>');
$x->{$f1->getName()} = $f1; // adds $f1 to $x
但是,这似乎不会将我的 XML 视为原始 XML,因此会导致出现 &lt; 和 &gt; 转义标签。似乎也出现了几个关于命名空间的警告。
我想我可以快速替换这些标签,但我不确定它是否会导致将来出现问题,而且感觉肯定不对。
手动破解 XML 不是一种选择,也不是一个接一个地添加子级。可以选择不同的库。
关于如何使它工作的任何线索?
谢谢!
【问题讨论】:
-
我的主要问题实际上是添加原始 XML,而不是添加代码的顺序,尽管非常希望标签位于顶部。引用的问题不涉及此类问题。我刚刚编辑了我的问题标题以反映这种差异。
-
我刚刚编辑了我的问题以反映真正的问题。