#php #xml #xpath
#php #xml #xpath
Вопрос:
У меня есть основной список XML, который ссылается на другие объекты XML, из которых мне нужно извлечь. Вот пример двух каналов:
<news state="Trial">
<newsListItem href="http://api.newsfeed.com/x/news/800614671/">
<id>800614671</id>
<publishDate>2011-10-10T14:17:08</publishDate>
</newsListItem>
<newsListItem....> // Many more news items
</news>
URL-адрес newsListItem указывает на дополнительный XML-документ, который выглядит как:
<newsItem encoding="UTF-8">
<id>800614671</id>
<state>Trial</state>
<publishDate>2011-10-10T14:17:08</publishDate>
<createdDate>2011-10-10T13:18:02</createdDate>
<lastModifiedDate>2011-10-10T14:18:38</lastModifiedDate>
<headline>Woman stabbed to death in south London</headline>
<extract>Officers have confirmed a woman has been stabbed to death in a Bexleyheath street this morning.</extract>
<categories href="http://api.newsfeed.com/x/news/800614671/categories/"/>
<text format="html"><p>By Guy Kilty</p>
<p>A woman has been stabbed to death and another has been injured in an attack in south London, police have confirmed.</p>
<p>Officers were called to a busy street near the Asda supermarket in the Broadway area of Bexleyheath at 08:30 BST this morning (October 10th) following reports that a woman had been stabbed.</p>
<p>The first victim was found with a stab wound and died at the scene, while the second had been stabbed in the hand and was taken to hospital.</p>
<p>A Metropolitan Police spokesman said: amp;quot;Officers and the London Ambulance Service arrived on the scene and found a woman suffering stab wounds, who was pronounced dead at 8.41am.</p>
<p>amp;quot;A second female suffered a knife injury to her hand. One woman has been arrested in connection with the incident.amp;quot;</p>
<p>Police had no immediate information about the age of any of the people involved or any reason for the attack.</p>
</text>
</newsItem>
Можно ли использовать XPath в основном канале для извлечения данных из hrefs? Изначально я смотрел на что-то вроде /news/newsListItem/@href/???/newsItem/headline
, но я не уверен, что это правильный путь. Возможно ли это вообще с XPath?
Любые советы будут с благодарностью. Я впервые работаю с XPath.
Комментарии:
1. К сожалению, я не смог выполнить это с помощью php. Кажется, я ограничен функциями 1.0. Спасибо всем за ответы. Голоса за всех (поскольку все 3 были правильными)!
Ответ №1:
К сожалению, для вас это невозможно. Лучшее, что вы можете сделать, это получить ссылку на href, загрузить второй XML-файл, а затем получить необходимую информацию.
Ответ №2:
Существует функция XPath doc() с этой подписью:
fn:doc($uri как xs:string?) как document-node()?
Он принимает URI и возвращает узел документа. Это должно сработать; дайте мне знать, если вам нужна дополнительная информация.
Комментарии:
1. В настоящее время PHP поддерживает только функции XPath 1.0
Ответ №3:
Вероятно, вы спрашиваете о fn:doc($uri как xs:string?) Как document-node() ?функция (доступна в XPath 2.0). Не уверен, что это сработает, но ваш запрос можно переписать как:
fn:doc(/news/newsListItem/@href)/newsItem/headline
Комментарии:
1. В настоящее время PHP поддерживает только функции XPath 1.0
2. Спасибо AurelioDeRosa. Это то, что я тоже узнал!