繁体   English   中英

PHP解析xml xpath

[英]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'");

请熟悉SimpleXml API:

$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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM