Благодаря AakashM он привел меня в правильном направлении. Для вопроса ниже, это выражение xPath, которое привело меня правильно:
"//channel/item[category[@domain='http://www.somelink.com/?category=4']]"
Оригинальный пост:
У меня есть лента XML, которая выглядит примерно так (отрывок):
<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-узлы (с их дочерними элементами) на основе этого надоедливого атрибута «domain» в узле категории, но независимо от того, что я пытаюсь сделать, это не работает .
Самым близким, что я получил, было "// 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
Выражение должно содержать все дочерние элементы двух элементов в примере, но, как вы можете видеть, присутствует только информация в узле категории, мне нужны все узлы элементов.
Любая помощь будет принята с благодарностью.