You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于SimpleXML跳过属性的技术问询及测试XML内容解析

解决SimpleXML中属性获取(跳过属性)的问题

我来帮你搞定这个SimpleXML的属性访问问题——这绝对是新手用SimpleXML最容易踩的小坑之一,刚接触的时候很容易把属性和子元素的访问方式搞混。

先明确核心点:在SimpleXML中,元素的属性是通过数组式语法$element['属性名']来访问的,而不是像子元素那样用->符号。下面结合你的XML示例,一步步给你演示如何正确获取那些你之前"跳过"的属性:

第一步:加载XML内容

先把你的XML加载到SimpleXML对象中(无论是从字符串还是文件加载,方法类似):

$xmlContent = '<?xml version="1.0" encoding="UTF-8"?> 
<Transfer> 
    <ABR recordLastUpdatedDate="20180329" replaced="N"> 
        <ABN status="ACT" ABNStatusFromDate="20000214">80007321682</ABN> 
        <EntityType> 
            <EntityTypeInd>PUB</EntityTypeInd> 
            <EntityTypeText>Australian Public Company</EntityTypeText> 
        </EntityType> 
        <MainEntity> 
            <NonIndividualName type="MN"> 
                <NonIndividualNameText>BLACK CABS COMBINED PTY LTD</NonIndividualNameText>
            </NonIndividualName>
        </MainEntity>
    </ABR>
</Transfer>';

$xml = simplexml_load_string($xmlContent);

第二步:获取元素的属性

比如要拿到recordLastUpdatedDate和replaced这两个属性:

// 获取ABR的recordLastUpdatedDate属性
$lastUpdated = (string)$xml->ABR['recordLastUpdatedDate'];
// 获取ABR的replaced属性
$replacedFlag = (string)$xml->ABR['replaced'];

echo "记录最后更新日期:$lastUpdated\n"; // 输出20180329
echo "是否被替换:$replacedFlag\n"; // 输出N

第三步:获取元素的属性和文本内容

return (<ABN>既有属性(`status`、`ABNStatusFromDate`)又有文本内容,处理方式如下:
```php
// 获取ABN的status属性
$abnStatus = (string)$xml->ABR->ABN['status'];
// 获取ABN的ABNStatusFromDate属性
$statusFromDate = (string)$xml->ABR->ABN['ABNStatusFromDate'];
// 获取ABN标签内的文本内容(即ABN号码)
$abnNumber = (string)$xml->ABR->ABN;

echo "ABN状态:$abnStatus\n"; // 输出ACT
echo "ABN状态生效日期:$statusFromDate\n"; // 输出20000214
echo "ABN号码:$abnNumber\n"; // 输出80007321682
```

### 几个关键注意事项
- 为什么要加`(string)`?因为SimpleXML返回的属性/元素都是`SimpleXMLElement`对象,直接echo时PHP会自动转成字符串,但如果要把值存入变量做后续处理(比如存入数据库、字符串拼接),显式转换可以避免意外的对象操作问题。
- 如果有多个同名元素(比如多个<ABR>),可以用`foreach`循环遍历属性:
```php
foreach ($xml->ABR as $abrItem) {
    echo "当前ABR更新日期:" . (string)$abrItem['recordLastUpdatedDate'] . "\n";
}
```
- 别把属性和子元素搞混!很多人一开始会错误地用`$xml->ABR->recordLastUpdatedDate`,这是在找<ABR>下的子元素`<recordLastUpdatedDate>`,而不是属性,自然会"跳过"找不到。

内容的提问来源于stack exchange,提问作者R C)
相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:02:20