使用PHP simplexml_load_string解析xml

时间:2012-09-21 12:51:14

标签: php xml xml-parsing

所以我有这个XML:var_dump

的结果
string '
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<data>
<entry key="message Type">
<![
    CDATA[
        urgent
    ]
]></entry><entry key="message Title"><![
    CDATA[
        teswt
    ]
]></entry><entry key="message Body"><![
    CDATA[
        teasd
    ]
]></entry><entry key="message Priority"><![
    CDATA[
        1
    ]
]></entry></data>
' (length=260)

我的代码如下:

$xml = simplexml_load_string($tablerow['data']);
$inputs = $xml->xpath("/schema/user_input[@type!='hidden']/input|/schema/input");
foreach($inputs as $cur_input) {

        $cur_input_name = (string)$cur_input['name'];
        $cur_input_value = $task_input_values[$cur_input_name];
        $input_name = isset($cur_input['label']) ? (string)$cur_input['label'] : $cur_input['name'];
}
        var_dump($tablerow['data']);

$tablerow['data']是来自数据库的XML。任何帮助如何从这个?{/ p>获取message Title

谢谢!

2 个答案:

答案 0 :(得分:2)

您使用的XPath表达式甚至不像您发布的XML文档,因此我不知道您希望如何找到您要查找的值。以下将提取&#34; teswt&#34;来自您的示例XML文档:

<?php
$xml = simplexml_load_string($tablerow['data']);
$title = '';

foreach ($xml->entry as $entry) {
    if ((string) $entry['key'] == 'message Title') {
        $title = (string) $entry;
        break;
    }
}

echo $title;
?>

修改:更新后使用SimpleXML&#34;样式&#34;而不是XPath。

答案 1 :(得分:0)

你的XML应该是正确的。

检查此

    <?php
    $xmlString = '<?xml version="1.0" encoding="UTF-8" standalone="no"?>
            <data>
                <entry key="message Type">
                    <![CDATA[urgent]]>
                </entry>
                <entry key="message Title">
                    <![CDATA[teswt]]>
                </entry>
                <entry key="message Body">
                    <![CDATA[xxxxx]]>
                </entry>
                <entry key="message Priority">
                    <![CDATA[1]]>
                </entry>
            </data>';

    $xml = simplexml_load_string($xmlString);

    foreach ($xml->entry as $entry)
    {   
       echo $entry['key']."<br/>";
    }
    ?>