首页 文章

在PHP中使用非常复杂的XML文件(SimpleXML)

提问于
浏览
1

我在PHP中加载了一个带有'simplexml_load_file'的XML文件,现在我想从中读取一些元素,用PHP打印出来 . 我发现的所有方法都没有带来成功,因为我的XML文件可能太复杂了...我发现的最好的事情如下:

只是想添加一篇关于如何从SimpleXMLElement中提取值的帖子 . 它并不像你想象的那么简单 . 因为它是一个复杂的对象,所以不能直接访问该元素 . 以下是表示SimpleXmlElement数组的var_dump的数据示例(1){[0] => object(SimpleXMLElement)#13(2){[“@attributes”] => array(1){[“name” ] => string(5)“title”} [0] => string(19)“PHP Tech Book”}}如果要提取书的 Headers ,则必须将指定的元素转换为类似的字符串 . $ newTitle =(string)$ title [0]; $ title变量是您使用simplexml_load_string从xml文档中提取的SimpleXMLElement . 要初始访问xml文档中的title元素,您可以使用xpath进行访问 . $ title = $ doc-> xpath('str [@ name =“title”]');希望这有助于那里的人 .

我试图使用“$ title = $ doc-> xpath('str [@ name =”title“]');”用我自己的XML文件替换它自己的元素,但后来我得到一个PHP错误:

遇到PHP错误严重性:通知消息:数组到字符串转换文件名:views / welcome_message.php行号:79

这是我的代码:

<?php
    if (file_exists('data.xml')) {
        $xml = simplexml_load_file('data.xml');

    $title = $xml->xpath('str[@name="name"]');
    echo $title;

    } else {
        exit('Failed to open test.xml.');
    }
    ?>

这是我非常困惑的xml文件的一点摘录:

SimpleXMLElement Object([folder] => SimpleXMLElement对象([@attributes] => Array([name] => ABC)[file] => SimpleXMLElement对象([@attributes] => Array([name] => DEF [ size] => 123 [创作时间] => 03.09.2012 16:36:59 [last-write-time] => 06.09.2012 10:46:39 [id3v2] => 1 [v2-tag-PRIV] => XMP; WM / MediaClassSecondaryID; WM / MediaClassPrimaryID?}`?#?? K ?? H?*(D; WM / Provider AMG; WM / WMContentID ????? E?@ ?? B ???? ; WM / WMCollectionID?Yd ?? B ?? N5 ?; WM / WMCollectionGroupID] ????? N ????? ^ e; WM / UniqueFileIdentifier AMG a _ id = R 2 0 5 6 3 8 9; AMG p _ id = P 2 6 4 5; AMG t _ id = T 2 2 1 6 6 0 0 3 [v2-track] => 2 [v2-song-title] => FGH [v2-album] => IJK [v2-genre] =>(12)[v2-tag-TPUB] => LMN [v2-tag-TYER] => 1997 [v2-tag-TPE2] => OPQ [v2-composer] => RST [v2 -artist] => UVW [id3v1] => 1 [song-title] => XYZ [artist] => ARTIST1 [album-title] => TITLE1 [year] => 1997 [comment] => [track] => 2 [genre] =>其他[mpeg-version] => 1 [mpeg-layer] => 3 [bitrate] => 320Kbps [sampl ing-rate] => 48000Hz [channel-mode] => JointStereo))

为什么[@attributes]中有'@',我该如何处理?如何从不同元素中获取信息?

2 回答

  • 0

    SimpleXML ->xpath() function返回一个SimpleXML对象数组,每个对象代表一个与XPath表达式匹配的元素或属性 .

    首先,你需要循环结果(或者使用 [0] 获取第一个结果);其次,您需要对找到的SimpleXML对象执行某些操作 . 如果它是一个属性, (string)$sx_attrib 会给你它的值;否则,你需要做进一步的操作 .

    最后,不要在SimpleXML对象上使用 var_dumpprint_rvar_export ,因为它们不是"real" PHP对象,而是围绕非PHP数据的包装 . 请改用simplexml_dump .

  • 0

    当我必须处理'heavy' dom操作时,我总是使用simple_html_dom . 试一试,也许有帮助!

相关问题