如何从xml中提取值

时间:2014-01-17 23:31:02

标签: php

我是PHP的新手。我正在尝试从以下XML中获取数据。现在,在我的代码$data->Address中包含以下代码的值,即:

$data->Address = "<tolist></tolist>
        <cclist>
            <cc>
                <contactpersonname>niraj</contactpersonname>
                <name>niraj</name>
                <email>stgh@gmail.com</email>
                <number>+91.3212365212</number>
                <prefix>Ms.</prefix>
                <contactpersonprefix>Ms.</contactpersonprefix>
            </cc>
            <cc>
                <contactpersonname>fdg</contactpersonname>
                <name>admin</name>
                <email>admin12@gmail.com</email>
                <number>+91.4554343234</number>
                <prefix>Mr.</prefix>
                <contactpersonprefix>Mr.</contactpersonprefix>
            </cc>
        </cclist>";

现在我想提取<contactpersonname>标签并打印出来。我怎么能这样做?

4 个答案:

答案 0 :(得分:1)

您可以使用以下代码将XML转换为数组:

$xml   = simplexml_load_string($buffer);
$array = json_decode(json_encode((array) $xml), 1);

其中$ buffer是xml字符串。

然后您可以获得如下人名:

$data->Address = $array['cclist']['cc']['contactpersonname'];

将xml转换为数组是一种快速而又脏的方法,但它可以正常工作。

答案 1 :(得分:1)

由于您的XML缺少包含所有其他标记的标记,因此您需要创建以便使解析器正常工作:

<?php
$buffer = "<tolist></tolist>
        <cclist>
            <cc>
                <contactpersonname>niraj</contactpersonname>
                <name>niraj</name>
                <email>stgh@gmail.com</email>
                <number>+91.3212365212</number>
                <prefix>Ms.</prefix>
                <contactpersonprefix>Ms.</contactpersonprefix>
            </cc>
            <cc>
                <contactpersonname>fdg</contactpersonname>
                <name>admin</name>
                <email>admin12@gmail.com</email>
                <number>+91.4554343234</number>
                <prefix>Mr.</prefix>
                <contactpersonprefix>Mr.</contactpersonprefix>
            </cc>
        </cclist>";

//   ***** wrap the whole thing in a <root> tag...
$xml   = simplexml_load_string("<root>".$buffer."</root>");
$array = json_decode(json_encode((array) $xml), 1);

echo "<pre>";
print_r($array);
echo "</pre>";
?>

结果:

Array
(
    [tolist] => Array
        (
        )

    [cclist] => Array
        (
            [cc] => Array
                (
                    [0] => Array
                        (
                            [contactpersonname] => niraj
                            [name] => niraj
                            [email] => stgh@gmail.com
                            [number] => +91.3212365212
                            [prefix] => Ms.
                            [contactpersonprefix] => Ms.
                        )

                    [1] => Array
                        (
                            [contactpersonname] => fdg
                            [name] => admin
                            [email] => admin12@gmail.com
                            [number] => +91.4554343234
                            [prefix] => Mr.
                            [contactpersonprefix] => Mr.
                        )

                )

        )

)

<强>已更新

现在,您可以向下导航到您想去的地方

echo "<pre>";
$ccList = $array['cclist'];
$cc = $ccList['cc'];
$contacts = array();
foreach($cc as $i=>$val) {
  $contacts[$i]=$val['contactpersonname'];
}
echo "first contact: " . $contacts[0] . "<br>";
echo "second contact: " . $contacts[1] ."<br>";

结果:

first contact: niraj
second contact: fdg

答案 2 :(得分:0)

试试这个..

$xml = new SimpleXMLElement($string);
$results = $xml->xpath('cclist/cc/contactpersonname');

http://php.net/manual/en/simplexmlelement.xpath.php

答案 3 :(得分:0)

$xml = simplexml_load_file("note.xml");
echo $xml->contactpersonname;

这要求您从xml文件加载它。如果你已经在代码中有字符串,我建议使用正则表达式。 如果您知道数据不会被错误写入!

$pattern = '#<contactpersonname>(.*?)</contactpersonname>#';
echo preg_match ($pattern, $data->Address);