PHP RegisterXPathNamespace-来源未知的XML前缀
我对PHP/XPath非常陌生。我在PHP中使用SimpleXML和XPath,使用名称空间遍历XML 我的问题是关于registerXPathNamespace函数中的'prefix'参数。PHP RegisterXPathNamespace-来源未知的XML前缀,php,xml,xpath,simplexml,Php,Xml,Xpath,Simplexml,我对PHP/XPath非常陌生。我在PHP中使用SimpleXML和XPath,使用名称空间遍历XML 我的问题是关于registerXPathNamespace函数中的'prefix'参数。 我的xml提要中有两个XMLN;但是,我不确定在这种情况下如何使用该函数。 运行此代码时,我得到以下错误消息: Undefined offset: 0 我的XML不能以任何方式更改。 请参阅下面的代码。谢谢你的任何线索 PHP代码: <?php $url = 'test.xml'; $simpl
我的xml提要中有两个XMLN;但是,我不确定在这种情况下如何使用该函数。
运行此代码时,我得到以下错误消息:
Undefined offset: 0
我的XML不能以任何方式更改。
请参阅下面的代码。谢谢你的任何线索
PHP代码:
<?php
$url = 'test.xml';
$simplexml = simplexml_load_file($url);
//below, I'm uncertain as to what should be the prefix,
//in the case of no apparent prefix in the xml - I've seen 'a' in other
//examples (where the prefix does not exist in the xml), but unsure why.
$simplexml->registerXPathNamespace('a','http://www.digitalmeasures.com/schema/data');//
//below, as the 'dmd' prefix is in the xml, I've included it here.
$simplexml->registerXPathNamespace('dmd','http://www.digitalmeasures.com/schema/data-metadata');
//
$myDataObjects2 = $simplexml->xpath('//Record/INTELLCONT[@id="14"]/CONTYPE')[0];
//$myDataObjects2 = $simplexml->xpath('//Record/INTELLCONT/CONTYPE')[0];
echo $myDataObjects2;
?>
registerXPathNamespace('a','http://www.digitalmeasures.com/schema/data');//
//下面,由于“dmd”前缀在xml中,所以我将其包含在这里。
$simplexml->registerXPathNamespace('dmd','http://www.digitalmeasures.com/schema/data-metadata');
//
$myDataObjects2=$simplexml->xpath('//Record/INTELLCONT[@id=“14”]/CONTYPE')[0];
//$myDataObjects2=$simplexml->xpath('//Record/INTELLCONT/CONTYPE')[0];
echo$myDataObjects2;
?>
XML:
<Data xmlns="http://www.digitalmeasures.com/schema/data" xmlns:dmd="http://www.digitalmeasures.com/schema/data-metadata" dmd:date="2018-01-03">
<Record userId="148" username="john-doe" termId="44" dmd:surveyId="12">
<dmd:IndexEntry indexKey="DEPARTMENT" entryKey="Toocas-CK" text="Toocas-CK"/>
<INTELLCONT id="14" dmd:originalSource="MANUAL" dmd:lastModified="2017-02-21T15:21:45" dmd:startDate="2016-05-01" dmd:endDate="2016-07-31">
<CONTYPE>Author Content</CONTYPE>
<CONTYPEOTHER/>
<NEWREV>Revised</NEWREV>
<STATUS>Accepted</STATUS>
</INTELLCONT>
</Record>
</Data>
作者内容
修订过的
认可的
您已注册命名空间
$simplexml->registerXPathNamespace('a','http://www.digitalmeasures.com/schema/data');
您需要告诉xpath,您正在查找的节点属于该名称空间
//a:Record/a:INTELLCONT[@id="14"]/a:CONTYPE
您拥有的是所谓的默认名称空间-
xmlns=”http://www.digitalmeasures.com/schema/data“
默认情况下,它在XML中没有前缀,只是假设它在那里
但是在你的代码中,你需要给它一个名字,所以在你的例子中,你给了它一个前缀“a”
$simplexml->registerXPathNamespace('a','http://www.digitalmeasures.com/schema/data');
因此,在XPath中,原始文档中的元素没有前缀-它使用默认名称空间,并且在代码中您已经说过这应该有一个前缀“a”。所以您的XPath应该是
$myDataObjects2 = $simplexml->xpath('//a:Record/a:INTELLCONT[@id="14"]/a:CONTYPE')[0];
谢谢-但是,我的XML无法编辑。如何使用xml文档中存在的内容注册xmlns=“”?感谢此解决方案回答了您在注册命名空间方面的问题。你试过了吗?