gpt4 book ai didi

PHP - SimpleXML 故障排除中子节点中的命名空间转换

转载 作者:行者123 更新时间:2023-12-03 03:32:08 28 4
gpt4 key购买 nike

我正在使用 SimpleXML 和 XPath 尝试获取子节点('IndexEntry)属性('indexKey')的值。节点的命名空间,我已在另一个节点(“记录”)上成功测试。由于某种原因,该节点的属性('indexKey')没有返回。我尝试使用 Children 方法访问该节点,同时指定其 namespace 。

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('//a:Record[@username="john-smith"]');

if($xml_report_abbrev_bb){
echo '<br>CONTYPE is...'.$xml_report_abbrev_bb[0]->INTELLCONT->CONTYPE;
echo '<br>termId is...'.$xml_report_abbrev_bb[0]['termId'].'<br>';
echo '<br>surveyId is...'.$xml_report_abbrev_bb[0]->attributes('dmd',true)['surveyId'].'<br>';

//below - I've tried different methods of accessing the IndexEntry node...
$dmd_fields = $xml_report_abbrev_bb[0]->children('dmd',true);
echo '<br>dmd:IndexEntry is...'.$dmd_fields->IndexEntry['indexKey'].'<br>';

echo '<br>dmd:IndexEntry is...'.$xml_report_abbrev_bb[0]->children('dmd',true)->IndexEntry['indexKey'].'<br>';

//echo '<br>dmd:IndexEntry is...'.$xml_report_abbrev_bb[0]->IndexEntry('dmd',true)['indexKey'].'<br>';

//echo '<br>dmd:IndexEntry is...'.$xml_report_abbrev_bb[0]->xpath('/dmd:indexEntry[@indexKey]')[0].'<br>';


} else {
echo 'XPath query failed b';
}

?>

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"/>
<INTELLCONT 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>
</INTELLCONT>
</Record>
</Data>

最佳答案

在行

$dmd_fields = $xml_report_abbrev_bb[0]->children('dmd', true);

这意味着$dmd_fields将是一个节点列表,即使列表中只有一个节点 - 所以使用 $dmd_fields[0]引用<dmd:IndexEntry>元素。因为这是IndexEntry元素,只需使用此元素和该元素的属性列表即可...

echo '<br>dmd:IndexEntry is...'.$dmd_fields[0]->attributes()['indexKey'].'<br>';

关于PHP - SimpleXML 故障排除中子节点中的命名空间转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48465832/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com