示例,我有一个像这样的xml代码:
$xml=<<<XML
<?xml version="1.0"?>
<cars>
<desc1>
<h1>Title 1</h1>
<p>Content</p>
</desc1>
<desc2>
<h1>Title 1</h1>
<p>Content</p>
</desc2>
</cars>
XML;
如何使用simplexml在标记<desc1>...</desc1>
之间获取字符串,因此输出如下:
$output='<h1>Title 1</h1>
<p>Content</p>';
提前感谢:)
答案 0 :(得分:1)
您可以使用DOMDocument
然后将xml加载到其中。定位desc1
然后获取其子节点,保存并将其放入容器字符串中。例如:
$dom = new DOMDocument();
$dom->loadXML($xml);
$output = '';
$desc1 = $dom->getElementsByTagName('desc1')->item(0)->childNodes;
foreach ($desc1 as $children) {
$output .= $dom->saveHTML($children);
}
echo $output;
答案 1 :(得分:1)
作为@Ghost的替代方法,您可以使用Xpath直接获取子节点。
$dom = new DOMDocument();
$dom->loadXML($xml);
$xpath = new DOMXpath($dom);
$output = '';
foreach ($xpath->evaluate('//desc1[1]/node()') as $child) {
$output .= $dom->saveHTML($child);
}
echo $output;
Xpath表达式:
选择文档中任何位置的所有desc1
个节点:
//desc1
限制到第一个找到的节点:
//desc1[1]
获取子节点(包括文本节点):
//desc1[1]/node()
答案 2 :(得分:-1)
只是您特定简单示例的替代方案:
$output = "";
if(preg_match("/<desc1>[^<]*(<.*>)[^>]*<\/desc1>/s",$xml,$reg)) {
$output = $reg[1];
}