【发布时间】:2015-02-13 16:31:34
【问题描述】:
是否可以使用 xpath/xquery 来查询特定的 xml 节点,然后向其中导入/添加子节点?
示例(取自 http://codepad.org/gJ1Y2LjM 的代码,在类似问题中提出,但不相同):
1。 我想添加一个数组
$book = array('isbn'=>123456789099, 'title' => 'Harry Potter 3', 'author' => 'J K. Rowling', 'edition' => '2007');
2。 到现有的 XML。
$doc = new DOMDocument();
$doc->loadXML('<?xml version="1.0"?>
<books>
<book>
<isbn>123456789098</isbn>
<title>Harry Potter</title>
<author>J K. Rowling</author>
<edition>2005</edition>
</book>
<book>
<placeItHere></placeItHere>
<isbn>1</isbn>
<title>stuffs</title>
<author>DA</author>
<edition>2014</edition>
</book>
</books>');
3。 为此,它使用了以下片段。
$fragment = $doc->createDocumentFragment();
$fragment->appendXML(" <book>
<isbn>{$book['isbn']}</isbn>
<title>{$book['title']}</title>
<author>{$book['author']}</author>
<edition>{$book['edition']}</edition>
</book>
");
4。 但是我没有将它附加到根节点,而是几乎所有我在互联网上找到的示例:
$doc->documentElement->appendChild($fragment);
5。 我想将它(p.ex)附加到 /books/book/placeItHere 中的节点,而不是使用 getElementbyId 或 tagName,而是使用 xpath/xquery。我试过了
$xp = new domxpath($doc);
$parent = $xp->query("books/book/placeItHere");
到达节点,但从未设法将其用作父节点。
问题:如何使用该位置附加Child $fragment?有可能吗?
**YOUR BEAUTIFUL MAGIC**
最后我会保存它。
echo $doc->saveXML();
感谢您对我的任何帮助。
【问题讨论】:
-
好问题。你能告诉我们你尝试了什么代码,结果是什么?它是否给出了错误消息?
-
我尝试了很多不同的方法,但我认为我缺少一些基本的东西,比如如何将 xquery 的结果转换为可以用作 DOMDocument 的东西。通常错误是:“代码”致命错误:在非对象“代码”上调用成员函数 appendChild() -> 当我尝试以与 $dom 相关的任何方式直接使用 $parent 时。示例:$parent->item(0)->appendChild($fragment); #ERROR...我正在尝试获取以前的示例,但我认为我现在无法全部获取它们,因为我不在我的机器上)