感谢AakashM,他带领我朝着正确的方向前进。对于下面的问题,这是以正确的方式引导我的xPath表达式:
"//channel/item[category[@domain='http://www.somelink.com/?category=4']]"
原帖:
我有一个类似于此的XML Feed(摘录):
<channel>
<title>Channel Name</title>
<link>Link to the channel</link>
<item>
<title>Heading 1</title>
<link>http://www.somelink.com?id=100</link>
<description><![CDATA[ Text here ]]></description>
<publishDate>Fri, 03 Apr 2009 10:00:00</publishDate>
<guid>http://www.somelink.com/read-story-100</guid>
<category domain="http://www.somelink.com/?category=4">Category 1</category>
</item>
<item>
<title>Heading 2</title>
<link>http://www.somelink.com?id=110</link>
<description><![CDATA[ Text here ]]></description>
<publishDate>Fri, 03 Apr 2009 11:00:00</publishDate>
<guid>http://www.somelink.com/read-story-110</guid>
<category domain="http://www.somelink.com/?category=4">Category 1</category>
</item>
<channel>
这就是它的粗糙。我正在使用这段PHP(摘录):
$xml = simple_xml_load_file($xmlFile);
$xml->xpath($pattern);
现在我想基于类别节点中那个讨厌的“域”属性来获取所有ITEM节点(及其子节点),但无论我尝试它做什么 - 不工作。
我最接近的是“// category [@ domain ='http://www.somelink.com/?category=4']”
我试过的表情给了我这个结果:
[0] => SimpleXMLElement Object
(
[@attributes] => Array
(
[domain] => http://www.somelink.com/?category=4
)
[0] => Category 1
[1] => SimpleXMLElement Object
(
[@attributes] => Array
(
[domain] => http://www.somelink.com/?category=4
)
[0] => Category 1
表达式应包含示例中两个项目的所有子项,但正如您所看到的,只有类别节点中的信息存在,我想要所有项目节点。
任何帮助都将受到高度赞赏。
答案 0 :(得分:1)
(当您确定xml的结构时,请尝试并避免使用//
所以你希望所有item
个节点都有一个category
子节点,而这个节点又有一个具有特定值的domain
属性:
/channel/item[category[@domain='http://www.somelink.com/?category=4']]