Php “合并”;以“开始”;带有“的节点”;包括「;xpath搜索中的一个值
我有一个PHP xpath查询,可以很好地在XML文件的单个节点上进行搜索。在简化形式中,它如下所示:Php “合并”;以“开始”;带有“的节点”;包括「;xpath搜索中的一个值,php,xml,xpath,Php,Xml,Xpath,我有一个PHP xpath查询,可以很好地在XML文件的单个节点上进行搜索。在简化形式中,它如下所示: $url = 'myfile.xml'; $xml = simplexml_load_file($url); $xml->registerXPathNamespace("h", "https://library.example.ac.uk"); $found = $xml->xpath("//h:row[h:AUTHOR1[contains(.,'$search')]]"); .
$url = 'myfile.xml';
$xml = simplexml_load_file($url);
$xml->registerXPathNamespace("h", "https://library.example.ac.uk");
$found = $xml->xpath("//h:row[h:AUTHOR1[contains(.,'$search')]]");
...
限制是它只能找到AUTHOR1,但此XML库目录文件可以包含多个作者,如以下示例条目:
<?xml version="1.0" encoding="UTF-8"?>
<table xmlns="https://library.example.ac.uk">
<row>
<AUTHOR1>FABER, Adele</AUTHOR1>
<AUTHOR2>MAZLISH, Elaine</AUTHOR2>
<AUTHOR3></AUTHOR3>
<AUTHOR4></AUTHOR4>
<CALLNO>306.875 FAB</CALLNO>
<COPIES>1</COPIES>
<COPYNO>1.</COPYNO>
<CUSTOM1>2011</CUSTOM1>
<CUSTOM2></CUSTOM2>
<EDITION></EDITION>
<IBARCODE>856490.</IBARCODE>
<ISBN>0380705273</ISBN>
<PLACEPUBL>New York</PLACEPUBL>
<PUBLISHER>Norton</PUBLISHER>
<SUBJECT1>Child rearing</SUBJECT1>
<SUBJECT2>Sibling rivalry</SUBJECT2>
<SUBJECT3>Psychology</SUBJECT3>
<SUBJECT4></SUBJECT4>
<SUBJECT5></SUBJECT5>
<TITLE>Siblings without rivalry : how to help your children live together so you can live too</TITLE>
<WEBSITE/>
<WORDCOUNT>0</WORDCOUNT>
</row>
</table>
但我无法让任何一种变体起作用。(我敢肯定,问题不在于引号或括号的嵌套。)我已经尝试了名称
和本地名称
,因为以
位开头
所以!如何查找对任何
AUTHOR1
、AUTHOR2
、AUTHORn
的点击率。。。节点?问题更多的是如何选择节点,name()
将为您提供包含前缀的名称,因此您不需要将其指定为查询的单独部分(我认为它是默认前缀,因此为空)。因此,该值将为AUTHOR1
等。因此,请更改选择author节点的方式,使其仅使用/*[以(name(),'author')开头]
$found = $xml->xpath("//h:row[*[starts-with(name(), 'AUTHOR')][contains(.,'$search')]]");
(很抱歉延迟)您可以始终将
/..
添加到XPath的末尾以回溯到行元素(//h:row/*[以(name(),'AUTHOR')]开头][包含(,'$search')]/..
)。我还更新了一个更接近你的原始版本的答案…绝妙的作品绝对完美!!非常感谢延迟真是耽搁!;)
$found = $xml->xpath("//h:row[*[starts-with(name(), 'AUTHOR')][contains(.,'$search')]]");