Tôi muốn thiết lập văn bản của một số nút được tìm thấy bởi xpath()Làm cách nào để đặt giá trị văn bản của SimpleXmlElement mà không sử dụng giá trị gốc?
<?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>
Bạn đã lưu buổi chiều của mình. – Minkiele
Lưu ý rằng biến thể đầu tiên sử dụng ký pháp đối tượng dường như không hoạt động nữa trong PHP 7. –