如何在不使用父元素的情况下设置 SimpleXmlElement 的文本值? [英] How can I set text value of SimpleXmlElement without using its parent?
本文介绍了如何在不使用父元素的情况下设置 SimpleXmlElement 的文本值?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想设置 xpath() 找到的某个节点的文本
I want to set text of some node found by xpath()
<?php
$args = new SimpleXmlElement(
<<<XML
<a>
<b>
<c>text</c>
<c>stuff</c>
</b>
<d>
<c>code</c>
</d>
</a>
XML
);
// I want to set text of some node found by xpath
// Let's take (//c) for example
// convoluted and I can't be sure I'm setting right node
$firstC = reset($args->xpath("//c[1]/parent::*"));
$firstC->c[0] = "test 1";
// like here: Found node is not actually third in its parent.
$firstC = reset($args->xpath("(//c)[3]/parent::*"));
$firstC->c[2] = "test 2";
// following won't work for obvious reasons,
// some setText() method would be perfect but I can't find nothing similar,
$firstC = reset($args->xpath("//c[1]"));
$firstC = "test";
// maybe there's some hack for it?
$firstC = reset($args->xpath("//c[1]"));
$firstC->{"."} = "test"; // nope, just adds child named .
$firstC->{""} = "test"; // still not right, 'Cannot write or create unnamed element'
$firstC["."] = "test"; // still no luck, adds attribute named .
$firstC[""] = "test"; // still no luck, 'Cannot write or create unnamed attribute'
$firstC->addChild('','test'); // grr, 'SimpleXMLElement::addChild(): Element name is required'
$firstC->addChild('.','test'); // just adds another child with name .
echo $args->asXML();
// it outputs:
//
// PHP Warning: main(): Cannot add element c number 2 when only 1 such elements exist
// PHP Warning: main(): Cannot write or create unnamed element
// PHP Warning: main(): Cannot write or create unnamed attribute
// PHP Warning: SimpleXMLElement::addChild(): Element name is required
// <?xml version="1.0"? >
// <a>
// <b>
// <c .="test">test 1<.>test</.><.>test</.></c>
// <c>stuff</c>
// </b>
// <d>
// <c>code</c>
// <c>test 2</c></d>
// </a>
推荐答案
您可以使用 SimpleXMLElement 自引用:
$firstC->{0} = "Victory!!"; // hackity, hack, hack!
// -or-
$firstC[0] = "Victory!!";
看了之后发现
var_dump((array) reset($xml->xpath("(//c)[3]")))
这也适用于对的回答中概述的unset
操作:
This also works with unset
operations as outlined in an answer to:
这篇关于如何在不使用父元素的情况下设置 SimpleXmlElement 的文本值?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文