Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.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
使用包含相对路径的xPath谓词进行XML解析_Xml_Xpath_Predicate - Fatal编程技术网

使用包含相对路径的xPath谓词进行XML解析

使用包含相对路径的xPath谓词进行XML解析,xml,xpath,predicate,Xml,Xpath,Predicate,具有以下XML格式: <?xml version="1.0" encoding="UTF-8"?> <package xmlns="http://example.com/importer" version="1.0"> <metadata> <provider>company</provider> </metadata> <assets> <asset

具有以下XML格式:

<?xml version="1.0" encoding="UTF-8"?>
<package xmlns="http://example.com/importer" version="1.0">
    <metadata>
        <provider>company</provider>
    </metadata>
    <assets>
        <asset type="title">
            <metadata>
                <original_spoken_locale>es-US</original_spoken_locale>
                <default_metadata_locale>en-US</default_metadata_locale>
                <country_of_origin>US</country_of_origin>
                <series>
                    <id>2845SD</id>
                    <locale_data lang="en-US">
                        <title>New Movie</title>
                        <synopsis_short>Short Description</synopsis_short>
                        <synopsis_medium>Medium Description</synopsis_medium>
                        <synopsis_long>Long Description</synopsis_long>
                    </locale_data>
                </series>
                <season>
                    <container_id>4345SD</container_id>
                    <season_display_number>2</season_display_number>
                    <locale_data lang="en-US">
                        <title>Season 2 Title</title>
                        <synopsis_short>Season 2 Short Description</synopsis_short>
                        <synopsis_medium>Season 2 Medium Description</synopsis_medium>
                        <synopsis_long>Season 2 Long Description</synopsis_long>
                    </locale_data>
                </season>
            </metadata>
        </asset>
    </assets>
</package>
工作xpath查询:

$xpath->query("//m:package/m:metadata/m:provider")
=> DOMNodeList {#4696
     +length: 1,
   }

$xpath->query("//m:package/m:assets/m:asset/m:metadata/m:season/m:locale_data[@lang='en-US']/m:title")
=> DOMNodeList {#4722
     +length: 1,
   }

我想要的是locale\u数据节点的lang值与默认的\u元数据\u locale的值相匹配。以下操作不起作用:

$xpath->query("//m:package/m:assets/m:asset/m:metadata/m:season/m:locale_data[@lang='../../m:default_metadata_locale']/m:title")
=> DOMNodeList {#4720
     +length: 0,
   }
还尝试:

$xpath->query("//m:package/m:assets/m:asset/m:metadata/m:season/m:locale_data[@lang='./../../m:default_metadata_locale']/m:title")

这是PHP代码,但并不重要,因为xpath是通用查询语言。任何指导都将不胜感激。

我仍然不确定您想要什么,但请尝试此xpath表达式(严格基于上述xml),看看它是否有效:

//package/assets/asset/metadata/season/locale_data[@lang=../../default_metadata_locale]/title

我仍然不确定您想要的是什么,但请尝试此xpath表达式(严格基于上面的xml),看看它是否有效:

//package/assets/asset/metadata/season/locale_data[@lang=../../default_metadata_locale]/title

“我想要的是locale\u data节点的lang值,以匹配默认值\u metadata\u locale”-这还不清楚;你能显示你想要的输出吗?在这种情况下,我应该找到一个匹配项,因为/package/assets/asseta/metadata/seasure/locale\u data[@lang]属性有一个值'en-US',它与节点default\u-metadata\u-locale的值匹配“hat I-want是locale\u-data节点的lang值以匹配default\u-metadata\u-locale”-这还不清楚;你能显示你想要的输出吗?在这种情况下,我应该找到一个匹配项,因为/package/assets/asset/metadata/seasure/locale_data[@lang]属性的值为'en-US',它与节点default_-metadata_-localeAah的值匹配,我刚刚删除了单引号,它就工作了。因此,下面的工作:
$xpath->query(//m:package/m:assets/m:metadata/m:seasure/m:locale\u data[@lang=../../m:default\u metadata\u locale]/m:title”)
。谢谢你的Hintah,我刚刚删除了单引号,它成功了。因此,下面的工作:
$xpath->query(//m:package/m:assets/m:metadata/m:seasure/m:locale\u data[@lang=../../m:default\u metadata\u locale]/m:title”)
。谢谢你的提示