【问题标题】:Using XPath with SimpleXML in PHP在 PHP 中使用 XPath 和 SimpleXML
【发布时间】:2010-11-19 10:49:02
【问题描述】:
$xml = new SimpleXMLElement(getpage('http://api.themoviedb.org/2.1/Genres.getList/en/xml/APIKEY'));
$genres = $xml->xpath('/opensearchdescription/genres/genre');
foreach($genres as $genre)
{
    echo $genre->id;
}

我不确定为什么它不起作用 :((是的 APIKEY 在我的代码中被替换)

XML 是:

<?xml version="1.0" encoding="UTF-8"?>
<OpenSearchDescription xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/">
  <opensearch:Query searchTerms=""/>
  <opensearch:totalResults>30</opensearch:totalResults>
  <genres>
    <translated>true</translated>
    <genre name="Action">
      <id>28</id>

      <url>http://www.themoviedb.org/genre/action</url>
    </genre>
    <genre name="Adventure">
      <id>12</id>
      <url>http://www.themoviedb.org/genre/adventure</url>
    </genre>
    <genre name="Animation">

      <id>16</id>
      <url>http://www.themoviedb.org/genre/animation</url>
    </genre>
    <genre name="Comedy">
      <id>35</id>
      <url>http://www.themoviedb.org/genre/comedy</url>
    </genre>

    <genre name="Crime">
      <id>80</id>
      <url>http://www.themoviedb.org/genre/crime</url>
    </genre>
    <genre name="Disaster">
      <id>105</id>
      <url>http://www.themoviedb.org/genre/disaster</url>

    </genre>
    <genre name="Documentary">
      <id>99</id>
      <url>http://www.themoviedb.org/genre/documentary</url>
    </genre>
    <genre name="Drama">
      <id>18</id>

      <url>http://www.themoviedb.org/genre/drama</url>
    </genre>
    <genre name="Eastern">
      <id>82</id>
      <url>http://www.themoviedb.org/genre/eastern</url>
    </genre>
    <genre name="Erotic">

      <id>2916</id>
      <url>http://www.themoviedb.org/genre/erotic</url>
    </genre>
    <genre name="Family">
      <id>10751</id>
      <url>http://www.themoviedb.org/genre/family</url>
    </genre>

    <genre name="Fan Film">
      <id>10750</id>
      <url>http://www.themoviedb.org/genre/fan-film</url>
    </genre>
    <genre name="Fantasy">
      <id>14</id>
      <url>http://www.themoviedb.org/genre/fantasy</url>

    </genre>
    <genre name="Film Noir">
      <id>10753</id>
      <url>http://www.themoviedb.org/genre/film-noir</url>
    </genre>
    <genre name="History">
      <id>36</id>

      <url>http://www.themoviedb.org/genre/history</url>
    </genre>
    <genre name="Holiday">
      <id>10595</id>
      <url>http://www.themoviedb.org/genre/holiday</url>
    </genre>
    <genre name="Horror">

      <id>27</id>
      <url>http://www.themoviedb.org/genre/horror</url>
    </genre>
    <genre name="Music">
      <id>10402</id>
      <url>http://www.themoviedb.org/genre/music</url>
    </genre>

    <genre name="Musical">
      <id>22</id>
      <url>http://www.themoviedb.org/genre/musical</url>
    </genre>
    <genre name="Mystery">
      <id>9648</id>
      <url>http://www.themoviedb.org/genre/mystery</url>

    </genre>
    <genre name="Neo-noir">
      <id>10754</id>
      <url>http://www.themoviedb.org/genre/neo-noir</url>
    </genre>
    <genre name="Road Movie">
      <id>1115</id>

      <url>http://www.themoviedb.org/genre/road-movie</url>
    </genre>
    <genre name="Romance">
      <id>10749</id>
      <url>http://www.themoviedb.org/genre/romance</url>
    </genre>
    <genre name="Science Fiction">

      <id>878</id>
      <url>http://www.themoviedb.org/genre/science-fiction</url>
    </genre>
    <genre name="Short">
      <id>10755</id>
      <url>http://www.themoviedb.org/genre/short</url>
    </genre>

    <genre name="Sport">
      <id>9805</id>
      <url>http://www.themoviedb.org/genre/sport</url>
    </genre>
    <genre name="Suspense">
      <id>10748</id>
      <url>http://www.themoviedb.org/genre/suspense</url>

    </genre>
    <genre name="Thriller">
      <id>53</id>
      <url>http://www.themoviedb.org/genre/thriller</url>
    </genre>
    <genre name="War">
      <id>10752</id>

      <url>http://www.themoviedb.org/genre/war</url>
    </genre>
    <genre name="Western">
      <id>37</id>
      <url>http://www.themoviedb.org/genre/western</url>
    </genre>
  </genres>

</OpenSearchDescription>

【问题讨论】:

  • 尝试将opensearchdescription更改为OpenSearchDescription
  • 你可以使用//genre作为你的xpath,除非你特别想像你一样具体。

标签: php xml xpath simplexml


【解决方案1】:

XML 区分大小写 - OpenSearchDescriptionopensearchdescription 不同。

试试这个:

$genres = $xml->xpath('/OpenSearchDescription/genres/genre');

【讨论】:

  • 谢谢,我使用的是 Firebug.. 但它会将所有 xml 转换为小写。对 XPath 助手有什么建议吗?
  • @Johnny - firebug 不应该弄乱 XML 元素名称和大小写。 XPath 助手是什么意思?
  • 可以帮助我进行 XPath 查询的东西。例如。 Firebug 会让我“复制 XPath”
  • @Johnny - 抱歉,不知道这样的事情。有一些网站可能会有所帮助 - 这是一个不错的网站:chris.photobooks.com/xml/default.htm
猜你喜欢
  • 2012-01-19
  • 1970-01-01
  • 1970-01-01
  • 2023-03-18
  • 2012-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多