需要帮助更新我之前做过的一些simplexml代码。我解析的XML文件是以新的方式格式化的,但我无法弄清楚如何导航它。
旧XML格式的示例:
<?xml version="1.0" encoding="UTF-8"?>
<pf version="1.0">
<pinfo>
<pid><![CDATA[test1 pid]]></pid>
<picture><![CDATA[http://test1.image]]></picture>
</pinfo>
<pinfo>
<pid><![CDATA[test2 pid]]></pid>
<picture><![CDATA[http://test2.image]]></picture>
</pinfo>
</pf>
然后是新的XML格式(注意&#34;类别名称&#34;添加):
<?xml version="1.0" encoding="UTF-8"?>
<pf version="1.2">
<category name="Cname1">
<pinfo>
<pid><![CDATA[test1 pid]]></pid>
<picture><![CDATA[http://test1.image]]></picture>
</pinfo>
</category>
<category name="Cname2">
<pinfo>
<pid><![CDATA[test2 pid]]></pid>
<picture><![CDATA[http://test2.image]]></picture>
</pinfo>
</category>
</pf>
在解析之后的旧代码下面,因为添加了&#34;类别名称&#34;在XML中:
$pinfo = new SimpleXMLElement($_SERVER['DOCUMENT_ROOT'].'/xml/file.xml', null, true);
foreach($pinfo as $resource)
{
$Profile_id = $resource->pid;
$Image_url = $resource->picture;
// and then some echo´ing of the collected data inside the loop
}
我需要添加什么或完全不同?我尝试使用xpath,子项并按属性排序但没有运气 - SimpleXML对我来说一直是个谜:)
答案 0 :(得分:0)
加载XML文件时,类别元素作为自己的数组存在。您用于解析的XML包含在其中。您需要做的就是用另一个foreach
包装当前代码。除此之外,没有太大的变化。
foreach($pinfo as $category)
{
foreach($category as $resource)
{
$Profile_id = $resource->pid;
$Image_url = $resource->picture;
// and then some echo´ing of the collected data inside the loop
}
}
答案 1 :(得分:0)
您正在迭代以前位于根元素中的所有<pinfo>
元素:
foreach ($pinfo as $resource)
现在所有<pinfo>
元素已从根元素移动到<category>
元素。您现在需要首先查询这些元素:
foreach ($pinfo->xpath('/*/category/pinfo') as $resource)
现在错误的命名变量$pinfo
有点偏僻,所以最好做一些更改:
$xml = new SimpleXMLElement($_SERVER['DOCUMENT_ROOT'].'/xml/file.xml', null, true);
$pinfos = $xml->xpath('/*/category/pinfo');
foreach ($pinfos as $pinfo) {
$Profile_id = $pinfo->pid;
$Image_url = $pinfo->picture;
// ... and then some echo´ing of the collected data inside the loop
}