我正试图用下面的结构访问simplexml对象中的这些元素。
我花了很多时间试图获得这个xml块中的值:
<result name="doclist" numFound="9" start="0">
<doc>
<str name="merchant_name_url_title">accuscore</str>
<str name="end_date_time"/>
<str name="category">betting & gaming</str>
<str name="merchant_name">Accuscore</str>
<str name="link_type">Text Link</str>
</doc>
</result>
我正在尝试获取"numFound"的值以及每条记录的所有"doc/str"数据。
下面是完整的结构。我只展示了2个"doc"元素,但可能有数千个
<response>
<lst name="responseHeader">
<int name="status">0</int>
<int name="QTime">5</int>
<lst name="params">
<str name="indent">true</str>
<str name="start">0</str>
<str name="q">*:*</str>
<str name="rows">2</str>
</lst>
</lst>
<lst name="grouped">
<lst name="merchant_name">
<int name="matches">5143</int>
<arr name="groups">
<lst>
<str name="groupValue">accuscor</str>
<result name="doclist" numFound="9" start="0">
<doc>
<str name="merchant_name_url_title">accuscore</str>
<str name="end_date_time"/>
<str name="category">betting & gaming</str>
<str name="merchant_name">Accuscore</str>
<str name="link_type">Text Link</str>
</doc>
</result>
</lst>
<lst>
<str name="groupValue">acdse</str>
<result name="doclist" numFound="3" start="0">
<doc>
<str name="merchant_name_url_title">acdsee</str>
<str name="end_date_time"/>
<str name="category">computer hardware & software</str>
<str name="merchant_name">ACDSee</str>
<str name="link_type">Text Link</str>
</doc>
</result>
</lst>
</arr>
</lst>
</lst>
我的头撞在墙上好几个小时了,决定在这里寻求帮助!
如有任何帮助或提示,我们将不胜感激。
提前感谢!
粘贴的XML无效,这不仅是因为您错过了</response>
,还因为其中有未粘贴的&
符号,应该是&
。
我还想说,它显然是由不懂XML的人编写的,因为元素名称(str
、arr
、lst
等)似乎只定义数据类型。
然而,假设您修复了这个问题,并将其加载到一个名为$sx
的SimpleXML对象中,则可以使用XPath表达式来查找所有result
元素,然后从那里继续:
foreach ( $sx->xpath('//lst[@name="grouped"]//result') as $result )
{
echo 'Begin Result; numFound: ' . (string)$result['numFound'] . PHP_EOL;
foreach ( $result->doc as $doc )
{
echo 'Begin doc:' . PHP_EOL;
foreach ( $doc->str as $str )
{
echo (string)$str['name'] . ': ' . (string)$str . PHP_EOL;
}
echo 'End doc' . PHP_EOL . PHP_EOL;
}
echo 'End result' . PHP_EOL . PHP_EOL;
}