[英]PHP parsing xml xpath
XML
<person>
<description>
<p>blah blah blah</p>
<p>kjdsfksdjf</p>
</description>
</person>
<person>
<description>
k kjsdf kk sak kfsdjk sadk
</description>
</person>
我想解析描述,以便它返回其中的html标记。
我尝试了这两种方法,但均未成功
$description = ereg_replace('<description>|</description>','',$person->description->asXML());
$description = $person->description;
有什么建议么?
编辑
我要完成的工作是将xml文件导入到mysql数据库中。 一切正常,都可以接受上面提到的内容...说明中的段落标记未显示...并且它们必须存在。 mysql字段“描述”设置为文本字段。 如果我要解析XML以在浏览器中输出,则$description = ereg_replace('<description>|</description>','',$person->description->asXML());
工作正常...这不是真的,但是当我尝试导入mysql时。 我需要添加一些东西到mysql INSERT吗? mysql_query("UPDATE table SET description = '$value' WHERE id = '$id'");
$xml = <<< XML
<person>
<description>
<p>blah blah blah</p>
<p>kjdsfksdjf</p>
</description>
</person>
XML;
$person = simplexml_load_string($xml);
foreach ($person->description->children() as $child) {
echo $child->asXml();
}
给
<p>blah blah blah</p><p>kjdsfksdjf</p>
请注意,SimpleXml无法对您显示的第二个description元素执行相同的操作,因为它没有文本节点的概念,例如
$xml = <<< XML
<person>
<description>
k kjsdf kk sak kfsdjk sadk
</description>
</person>
XML;
$person = simplexml_load_string($xml);
foreach ($person->description->children() as $child) {
echo $child->asXml();
}
将返回一个空字符串。 如果要使用统一的API,请使用DOM:
$xml = <<< XML
<people>
<person>
<description>
<p>blah blah blah</p>
<p>kjdsfksdjf</p>
</description>
</person>
<person>
<description>
k kjsdf kk sak kfsdjk sadk
</description>
</person>
</people>
XML;
$dom = new DOMDocument;
$dom->loadXml($xml);
$xp = new DOMXPath($dom);
foreach ($xp->query('/people/person/description/node()') as $child) {
echo $dom->saveXml($child);
}
会给
<p>blah blah blah</p>
<p>kjdsfksdjf</p>
k kjsdf kk sak kfsdjk sadk
要将XML导入MySql,还可以使用http://dev.mysql.com/doc/refman/5.5/en/load-xml.html
我想解析描述,以便它返回其中的html标记。
在XPath中,您将选择description
元素的子节点。
采用:
"//person/description/*"
获取所有子节点(仅html标记)或
"//person/description/node()"
获取所有子节点(html标记和文本节点)。
例如,此php代码:
<?php
$xml = simplexml_load_file("test.xml");
$result = $xml->xpath("//person/description/*");
print_r($result);
?>
返回SimpleXMLElements的数组,这些数组是description
。 检索每个项目及其所有后代节点。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.