Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/228.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 Xpath按属性值筛选并选择备用属性_Php_Xml_Xpath_Blogger - Fatal编程技术网

Php Xpath按属性值筛选并选择备用属性

Php Xpath按属性值筛选并选择备用属性,php,xml,xpath,blogger,Php,Xml,Xpath,Blogger,我在XPath查询方面遇到问题。我正在使用//link[@rel='alternate'],但这将返回一个空节点集。我正在尝试编写一个查询,为rel=alternate的所有链接节点选择href属性的值 我做错了什么 下面是我正在使用的xml结构的简化示例 <feed> <entry> <id>1980475</id> <link rel="post" href="http://..."><

我在XPath查询方面遇到问题。我正在使用
//link[@rel='alternate']
,但这将返回一个空节点集。我正在尝试编写一个查询,为rel=alternate的所有链接节点选择href属性的值

我做错了什么

下面是我正在使用的xml结构的简化示例

<feed>
    <entry>
        <id>1980475</id>
        <link rel="post" href="http://..."></link>
        <link rel="edit" href="http://..."></link>
        <link rel="alternate" href="http://..."></link>
    </entry>
    <entry>
        <id>1980476</id>
        <link rel="post" href="http://..."></link>
        <link rel="edit" href="http://..."></link>
        <link rel="alternate" href="http://..."></link>
    </entry>
</feed>

正如@Jens所指出的,您可能正在处理Atom提要。Atom中的XML元素位于Atom命名空间中,其URI为
http://www.w3.org/2005/Atom

您需要注册该名称空间并在XPath表达式中使用它。请看如何做到这一点

当您发布输入XML的“简化示例”时,您可能删除了默认名称空间声明,如中所示

<feed xmlns="http://www.w3.org/2005/Atom">

正如@Jens所指出的,您可能正在处理Atom提要。Atom中的XML元素位于Atom命名空间中,其URI为
http://www.w3.org/2005/Atom

您需要注册该名称空间并在XPath表达式中使用它。请看如何做到这一点

当您发布输入XML的“简化示例”时,您可能删除了默认名称空间声明,如中所示

<feed xmlns="http://www.w3.org/2005/Atom">

您还可以发布当前正在尝试的代码吗?
//link[@rel='alternate']
$xmlDoc=simplexml\u load\u文件(“filepath.xml”)$nodelist=$xmlDoc->xpath(“//link[@rel='alternate']);
我尝试了你的代码并计数($xml->xpath('//link[@rel='alternate']))返回2,这是正确的:我打赌在实际的XML中有一些名称空间声明。在发送XPath查询之前注册这些名称空间声明。您还可以发布当前正在尝试的代码吗?
//link[@rel='alternate']
$xmlDoc=simplexml\u load\u file(“filepath.XML”);$nodelist=$xmlDoc->XPath(//link[@rel='alternate']));
我尝试了您的代码,并且
count($xml->xpath('//link[@rel=“alternate”]')
返回2,这是正确的:我打赌在实际的xml中有一些名称空间声明。在发送XPath查询之前注册这些查询。
xpath("//a:link[@rel='alternate']")