我是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(&#39; test_bb.xml&#39;):
<?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属性(Record节点,上面设置),但没有成功。我尝试过添加“dmd:&#39;像这样的前缀:
echo 'surveyId is...<h1>'.$xml_report_abbrev_bb[0]['dmd:surveyId'].'</h1><br>';
这只是一个&#39; xpath&#39;技术,还是我需要在括号外设置?感谢。
答案 0 :(得分:2)
看到您已将http://www.digitalmeasures.com/schema/data
命名空间注册到XPath查询的a
前缀,您需要使用
$xml->xpath('//a:Record[@username="john-smith"]')