使用包含相对路径的xPath谓词进行XML解析
具有以下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 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”)
。谢谢你的提示