我试图用SimpleXML检索处理数据时遇到很大的困难。 我在这里读了许多线程这个问题上,他们看起来都像我在做什么,但我不工作。 下面是我得到了什么:
<ROOT>
<ROWS COMP_ID="165462">
<ROWS COMP_ID="165463">
</ROOT>
我的代码:
$xml = simplexml_load_file('10.xml');
foreach( $xml->ROWS as $comp_row ) {
$id = $comp_row->COMP_ID;
}
当我通过这在我的调试步骤,我可以看到的$ id没有被设置为COMP_ID的字符串值,而是成为一个SimpleXMLElement本身含有的类名对象。 我试图解决这一属性,但没有工作,其中包括$ comp_row-的许多变化>属性() - > COMP_ID等。
我在想什么?
SimpleXML的是阵列状物体。 骗片:
- 前缀的子元素的数字索引或穿越
- 不包括前缀的元素( 注意 ,我真的是前缀 ,不是空的命名空间 !
SimpleXMLElement
命名空间的处理是一个陌生的,可以说是打破。) - 第一个孩子:
$sxe[0]
- 新
SimpleXMLElement
具有匹配元素的子集: $sxe->ROWS
, $sxe->{'ROWS'}
- 迭代孩子:
foreach ($sxe as $e)
$sxe->children()
- 文本内容:
(string) $sxe
。 SimpleXMLElement
总是返回另一个SimpleXMLElement
,所以如果你需要一个字符串显式转换呢 !
- 前缀的子元素 :
-
$sxe->children('http://example.org')
返回一个新SimpleXMLElement
在匹配的命名空间元素, 命名空间中剥离 ,所以你可以用它在上一节等等。
- 属性中的空命名空间为关键指标:
- 具体属性:`$ SXE [ '属性名']
- 所有的属性:
$sxe->attributes()
-
$sxe->attributes()
返回一个特殊SimpleXMLElement
显示的属性子元素和属性,所以这两个了以下工作: -
$sxe->attributes()->COMP_ID
-
$a = $sxe->attributes(); $a['COMP_ID'];
- 属性的值:强制串
(string) $sxe['attr-name']
- 属性中的其他命名空间 :
- 所有的属性:
$sxe->attributes('http://example.org')
- 具体属性:
$sxe_attrs = $sxe->attributes('http://example.org'); $sxe_attrs['attr-name-without-prefix']
$sxe_attrs = $sxe->attributes('http://example.org'); $sxe_attrs['attr-name-without-prefix']
你想要的是:
$xml = '<ROOT><ROWS COMP_ID="165462"/><ROWS COMP_ID="165463"/></ROOT>';
$sxe = simplexml_load_string($xml);
foreach($sxe->ROWS as $row) {
$id = (string) $row['COMP_ID'];
}
你错过...
foreach( $xml->ROWS as $comp_row ) {
foreach ($comp_row->attributes() as $attKey => $attValue) {
// i.e., on first iteration: $attKey = 'COMP_ID', $attValue = '165462'
}
}
PHP手册:的SimpleXMLElement ::属性