我有一段 XML 如下
<records count="2">
<record>
<firstname>firstname</firstname>
<middlename>middlename</middlename>
<lastname>lastname</lastname>
<namesuffix/>
<address>
<street-number>demo</street-number>
<street-pre-direction/>
<street-name>demo</street-name>
<street-post-direction/>
<street-suffix>demo</street-suffix>
<city>demo</city>
<state>NY</state>
<zip>demo</zip>
<zip4>demo</zip4>
<county>demo</county>
</address>
<phonenumberdetails>
<phonenumber>demo</phonenumber>
<listed>demo</listed>
<firstname>demo</firstname>
</phonenumberdetails>
<dob day="" month="" year=""/>
<age/>
<date-first month="10" year="1999"/>
<date-last month="04" year="2011"/>
</record>
<record>
<firstname>firstname</firstname>
<middlename>middlename</middlename>
<lastname>lastname</lastname>
<namesuffix/>
<address>
<street-number>demo</street-number>
<street-pre-direction/>
<street-name>demo</street-name>
<street-post-direction/>
<street-suffix>demo</street-suffix>
<city>demo</city>
<state>NY</state>
<zip>demo</zip>
<zip4>demo</zip4>
<county>demo</county>
</address>
<phonenumberdetails>
<phonenumber>demo</phonenumber>
<listed>demo</listed>
<firstname>demo</firstname>
</phonenumberdetails>
<dob day="" month="" year=""/>
<age/>
<date-first month="10" year="1999"/>
<date-last month="04" year="2011"/>
</record>
</records>
现在,我已经能够使用 SimpleXML 获取 PHP 中除第一个日期和最后一个日期元素之外的所有数据。我一直在使用下面列出的代码
$dateFirst = 'date-first';
$dateLast = 'date-last';
$streetNumber = 'street-number';
$streetPreDirection = 'street-pre-direction';
$streetName = 'street-name';
$streetPostDirection = 'street-post-direction';
$streetSuffix = 'street-suffix';
$unitDesignation = 'unit-designation';
$unitNumber = 'unit-number';
foreach ($reportDataXmlrecords->records->record as $currentRecord) {
echo $currentRecord->$dateFirst['month'].'/'.$currentRecord->$dateFirst['year'];
echo $currentRecord->$dateLast['month'].'/'.$currentRecord->$dateLast['year'];
echo $currentRecord->address->$streetNumber;
$currentRecord->address->$streetName; // ......and so on
}
where $reportDataXmlrecords
是来自父节点的 simpleXML 对象的一部分
但是前两个回显不打印任何内容,而所有其他回显都正确打印,具体来说,我无法访问中的数据
<date-first month="10" year="1999"/>
<date-last month="04" year="2011"/>
如果我这样做的话也可以用于调试
print_r($currentRecord->$dateFirst);
它打印
SimpleXMLElement Object (
[@attributes] => Array ( [month] => 10 [year] => 1999 )
)
任何帮助将不胜感激。谢谢。
你的问题是当你这样做的时候
$currentRecord->$dateFirst['month']
PHP首先会评估$dateFirst['month']
在尝试将其用作财产之前作为一个整体
$dateFirst = 'date-first';
var_dump( $dateFirst['month'] ); // gives "d"
because 可以通过数组表示法的偏移量来访问字符串,但非整数偏移量会转换为整数,并且因为将 'month' 转换为整数为 0,所以您正在尝试执行以下操作$currentRecord->d
:
$xml = <<< XML
<record>
<date-first month="jan"/>
<d>foo</d>
</record>
XML;
$record = simplexml_load_string($xml);
$var = 'date-first';
echo $record->$var['month']; // foo
您可以使用大括号访问连字符的属性:
$record->{'date-first'}['month'] // jan
顺便说一句,当您的问题中显示的 XML 实际上是您使用 SimpleXml 加载的 XML 时,例如什么时候<records>
是根节点,那么做
$reportDataXmlrecords->records->record
无法工作,因为$reportDataXmlrecords
已经是根节点,你必须省略->records
如果你想迭代其中的记录元素。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)