php - XPath 在匹配占位符的属性节点时失败

标签 php xml xpath simplexml

我对 SimpleXML 和 XPath 非常陌生,虽然我已经成功地完成了几个与此类似的示例,但这个特定的示例似乎让我感到难过。
首先,我使用@$xml_report_abbrev_bb 变量在某个节点级别设置了一个“占位符”。但是,这行代码中的 xpath 似乎不起作用。
我的“错误陷阱”不断返回“XPath 查询失败”。
感谢任何线索。

PHP代码:

<?php
$url = "test_bb.xml";


$xml = simplexml_load_file($url);

$xml->registerXPathNamespace('a','http://www.digitalmeasures.com/schema/data');//
$xml->registerXPathNamespace('dmd','http://www.digitalmeasures.com/schema/data-metadata');

$xml_report_abbrev_bb = $xml->xpath('//Record[@username="john-smith"]');


if($xml_report_abbrev_bb){
    echo $xml_report_abbrev_bb[0]->INTELL->CONTYPE;
    echo $xml_report_abbrev_bb[0]['termId'].'<br>';

} else {
    echo 'XPath query failed';  
}

?>

XML('test_bb.xml'):
<?xml version="1.0" encoding="UTF-8"?>
<Data xmlns="http://www.digitalmeasures.com/schema/data" xmlns:dmd="http://www.digitalmeasures.com/schema/data-metadata" dmd:date="2012-01-03">
    <Record userId="148" username="john-smith" termId="4" dmd:surveyId="12">
        <dmd:IndexEntry indexKey="D" entryKey="Dylan" text="Dylan"/>
        <INTELL id="14" dmd:originalSource="54TEX" dmd:lastModified="2017-04-18T10:54:29" dmd:startDate="2011-01-01" dmd:endDate="2011-12-31">
            <CONTYPE>Sales Tools</CONTYPE>
            <CONTYPEOTHER>Sales History</CONTYPEOTHER>
        </INTELL>
    </Record>
    <Record userId="149" username="mary-smith" termId="4" dmd:surveyId="16">
        <dmd:IndexEntry indexKey="D" entryKey="Dylan" text="Dylan"/>
        <INTELL id="14" dmd:originalSource="54TEX" dmd:lastModified="2012-04-18T10:54:29" dmd:startDate="2011-01-01" dmd:endDate="2011-12-31">
            <CONTYPE>Other Tools</CONTYPE>
            <CONTYPEOTHER>Sales History Part B</CONTYPEOTHER>
        </INTELL>
    </Record>
</Data>

更新:我尝试访问 dmd:surveyId 属性(上面设置的记录节点),但没有成功。我试过像这样添加'dmd:'前缀:
echo 'surveyId is...<h1>'.$xml_report_abbrev_bb[0]['dmd:surveyId'].'</h1><br>';

那是“仅 xpath”技术,还是我需要将其设置在方括号之外?谢谢。

最佳答案

看到你已经注册了http://www.digitalmeasures.com/schema/data命名空间到 a XPath 查询的前缀,您需要使用

$xml->xpath('//a:Record[@username="john-smith"]')

关于php - XPath 在匹配占位符的属性节点时失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48432315/

相关文章:

php - 在服务器上检测 OS X 10.4 及以下版本

java - 对话框标题栏中的自定义按钮

json - Glassfish 生成 JSON 时出错

xml - XPath 选择所有内容直到第一个 <br/>

python - 按标题类型拆分 HTML div 后,如何提取我感兴趣的内容?

xml - 如何使用 XPath 查找所有直接相邻的 sibling

php - 使用 php 的反向 Ajax 实现

javascript - 链接打开新窗口并刷新当前窗口

javascript - 在 php 中向输入类型图像添加 Click 函数,出现未定义错误

php - CakePHP 中的自动站点地图