Значения XML, связанные с Xpath

#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. Это то, что я тоже узнал!