Имеется следующее 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:
$xmlDoc = new \DOMDocument();
$xmlDoc->loadXML($xml_string);
$xpath = new \DOMXpath($xmlDoc);
$xpath->registerNamespace("m", "http://example.com/importer");
Рабочий запрос 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,
}
Что я хочу значение lang узла locale_data, совпадающее со значением default_metadata_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 является универсальным языком запросов. Любое руководство будет оценено.