【问题标题】:parsing xml with PHP simplexml_load_string使用 PHP simplexml_load_string 解析 xml
【发布时间】:2012-09-21 12:51:14
【问题描述】:

所以我有这个 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。任何帮助如何从中获取message Title 值??

谢谢!

【问题讨论】:

    标签: php xml xml-parsing


    【解决方案1】:

    您使用的 XPath 表达式甚至不像您发布的 XML 文档,所以我不知道您希望如何找到您正在寻找的值。以下将从您的示例 XML 文档中提取“teswt”:

    <?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“样式”而不是 XPath。

    【讨论】:

    • 它正在工作,但如果我有 3 条消息并且最后两条为空,它会将 $title 显示为“teswtteswtteswt”...
    • 我的答案中当前编写的代码只会导致将一个元素中的文本保存到$title。可能是你复制错了。
    【解决方案2】:

    你的 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/>";
        }
        ?>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-05
      • 1970-01-01
      • 1970-01-01
      • 2011-04-16
      • 2015-02-18
      • 1970-01-01
      • 2010-11-10
      • 2016-03-08
      相关资源
      最近更新 更多