簡體   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