本文介绍了如何在不使用父元素的情况下设置 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:
- 在 SimpleXML for PHP 中删除具有特定属性的子项
更多推荐
如何在不使用父元素的情况下设置 SimpleXmlElement 的文本值?
发布评论