Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在节点名中使用冒号从XML提要获取某些值_Php_Xml_Colon - Fatal编程技术网

Php 在节点名中使用冒号从XML提要获取某些值

Php 在节点名中使用冒号从XML提要获取某些值,php,xml,colon,Php,Xml,Colon,我似乎找不到从以下XML提要中正确获取某些值的方法: <?xml version="1.0" encoding="UTF-8"?> <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:newznab="http://www.newznab.com/DTD/2010/feeds/attributes/" encoding="utf-8"> <channel> <atom:

我似乎找不到从以下XML提要中正确获取某些值的方法:

<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:newznab="http://www.newznab.com/DTD/2010/feeds/attributes/" encoding="utf-8">
 <channel>
  <atom:link href="https://REMOVED.com/api" rel="self" type="application/rss+xml"/>
  <title>REMOVED</title>
  <description>API Details</description>
  <link>https://REMOVED.com/</link>
  <language>en-gb</language>
  <webMaster>hello@REMOVED.com</webMaster>
  <category>Stuff</category>
  <generator>Me</generator>
  <ttl>10</ttl>
  <docs>https://removed.com/apihelp/</docs>
  <image url="https://removed.com/themes/shared/img/logo.png" title="REMOVED" link="https://removed.com/" description="Visit REMOVED"/>
  <newznab:response offset="0" total="125000"/>
  <item>
   <title>Fair.Go.2017.09.18.HDTV.x264-FiHTV </title>
   <guid isPermaLink="true">https://REMOVED.com/details/427d2b6c5fb3a0f73bd43be4bb8cff955700fd4d</guid>
   <link>https://REMOVED.com/getnzb/427d2b6c5fb3a0f73bd43be4bb8cff955700fd4d.nzb&amp;i=1&amp;r=3bc4e94ef14337e4e2b490a3897c48f6</link>
   <comments>https://REMOVED.com/details/427d2b6c5fb3a0f73bd43be4bb8cff955700fd4d#comments</comments>
   <pubDate>Tue, 19 Sep 2017 10:18:21 +0200</pubDate>
   <category>TV &gt; SD</category>
   <description>Fair.Go.2017.09.18.HDTV.x264-FiHTV </description>
   <enclosure url="https://REMOVED.com/getnzb/427d2b6c5fb3a0f73bd43be4bb8cff955700fd4d.nzb&amp;i=1&amp;r=3bc4e94ef14337e4e2b490a3897c48f6" length="168013625" type="application/x-nzb"/>
   <newznab:attr name="category" value="5030"/>
   <newznab:attr name="size" value="168013625"/>
   <newznab:attr name="files" value="17"/>
   <newznab:attr name="poster" value="provide@4u.net (yeahsure)"/>
   <newznab:attr name="prematch" value="1"/>
   <newznab:attr name="info" value="https://REMOVED.com/api?t=info&amp;id=427d2b6c5fb3a0f73bd43be4bb8cff955700fd4d&amp;r=3bc4e94ef14337e4e2b490a3897c48f6"/>
   <newznab:attr name="grabs" value="0"/>
   <newznab:attr name="comments" value="0"/>
   <newznab:attr name="password" value="0"/>
   <newznab:attr name="usenetdate" value="Tue, 19 Sep 2017 10:07:47 +0200"/>
   <newznab:attr name="group" value="alt.binaries.teevee"/>
  </item>
</channel>
</rss>

远离的
API详细信息
https://REMOVED.com/
英国英语
hello@REMOVED.com
东西
我
10
https://removed.com/apihelp/
Fair.Go.2017.09.18.HDTV.x264-FiHTV
https://REMOVED.com/details/427d2b6c5fb3a0f73bd43be4bb8cff955700fd4d
https://REMOVED.com/getnzb/427d2b6c5fb3a0f73bd43be4bb8cff955700fd4d.nzb&i=1&;r=3bc4e94ef14337e4e2b490a3897c48f6
https://REMOVED.com/details/427d2b6c5fb3a0f73bd43be4bb8cff955700fd4d#comments
2017年9月19日星期二10:18:21+0200
电视SD
Fair.Go.2017.09.18.HDTV.x264-FiHTV
我需要这些节点的值以及size和usenetdate的值,并将它们放入一个数组中。这里只有1个,但在真正的提要中有数百个

PHP不会那么难吧?然而XMLWriter、DOM和SimpleXML都让我失望。或者我让他们失望了


有指针吗?

使用名称空间时会出现问题,在任何XML系统中处理它们都非常简单,这里我使用了SimpleXML。我还假设它是重复的通道

要使用名称空间,您需要在XML系统中注册它们,以便它知道如何将它们与搜索关联,因此这里我使用
newznab
作为
attr
的前缀。但这是您在XML文档中看到的内容,因此更易于阅读。XPath使用
[@name='size']
使其找到具有此属性/值组合的
attr
实例,然后返回
属性

$xml = simplexml_load_file('NewFile.xml');
$xml->registerXPathNamespace("atom", "http://www.w3.org/2005/Atom");
$xml->registerXPathNamespace("newznab", "http://www.newznab.com/DTD/2010/feeds/attributes/");

foreach( $xml->channel as $channel ){
    echo "Channel title=".(string)$channel->title.PHP_EOL;
    echo "size=".(string)$channel->xpath("descendant::newznab:attr[@name='size']/@value")[0].PHP_EOL;
    echo "usenetdate=".(string)$channel->xpath("descendant::newznab:attr[@name='usenetdate']/@value")[0].PHP_EOL;
}

请共享您尝试过的代码和预期输出。元素名称的格式为
前缀:localname
,其中前缀(例如
newznab
)表示XML命名空间(此处
http://www.newznab.com/DTD/2010/feeds/attributes/
)。要处理此XML,您需要了解所选处理库如何处理XML名称空间。通常,您需要使用(名称空间、本地名称)对定位元素。