我在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 回答
SimpleXML ->xpath() function返回一个SimpleXML对象数组,每个对象代表一个与XPath表达式匹配的元素或属性 .
首先,你需要循环结果(或者使用
[0]
获取第一个结果);其次,您需要对找到的SimpleXML对象执行某些操作 . 如果它是一个属性,(string)$sx_attrib
会给你它的值;否则,你需要做进一步的操作 .最后,不要在SimpleXML对象上使用
var_dump
,print_r
或var_export
,因为它们不是"real" PHP对象,而是围绕非PHP数据的包装 . 请改用simplexml_dump .当我必须处理'heavy' dom操作时,我总是使用simple_html_dom . 试一试,也许有帮助!