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

如何访问ADDRESS.LIST节点并获取其XML节点值?

嘿,我来帮你解决访问ADDRESS.LIST节点并获取值的问题!你的XML结构里,ADDRESS.LIST是一个包含多个ADDRESS子节点的集合,下面我用几种主流编程语言来演示具体实现:

PHP 实现

首先要注意你的XML字符串是转义过的(包含<这类实体),得先解码回原始XML内容,再用SimpleXML来解析:

// 假设$result是你提供的转义后XML字符串
$xmlString = html_entity_decode($result);
// 加载XML内容
$xml = simplexml_load_string($xmlString);

// 因为节点名包含`.`,需要用字符串形式访问(避免PHP把`.`当成属性分隔符)
$addressList = $xml->BODY->DATA->MESSAGE->{'ADDRESS.LIST'};

// 遍历每个ADDRESS子节点,获取文本值
foreach ($addressList->ADDRESS as $address) {
    echo (string)$address . PHP_EOL;
}

这段代码会逐个输出每个ADDRESS节点里的"address text"内容。

Python 实现

用Python自带的xml.etree.ElementTree模块即可,同样先处理转义的XML字符串:

import xml.etree.ElementTree as ET
import html

# 解码转义的XML字符串
xml_string = html.unescape(result)
# 解析XML
root = ET.fromstring(xml_string)

# 用XPath定位到ADDRESS.LIST节点
address_list = root.find('.//ADDRESS.LIST')

if address_list is not None:
    # 遍历所有ADDRESS子节点
    for address in address_list.findall('ADDRESS'):
        print(address.text.strip())

如果你的XML后续涉及到命名空间(比如示例里的xmlns:UDF="TallyUDF"),可以通过注册命名空间前缀来处理,不过当前示例里ADDRESS.LIST没用到该命名空间,所以无需额外操作。

Java 实现

用Java的DOM解析API来处理,步骤如下:

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import java.io.ByteArrayInputStream;
import java.net.URLDecoder;

public class AddressParser {
    public static void main(String[] args) {
        try {
            // 替换成你的$result字符串
            String escapedXml = "<ENVELOPE> <HEADER> <VERSION>1</VERSION> <STATUS>1</STATUS> </HEADER> <BODY> <DESC></DESC> <DATA> <MESSAGE xmlns:UDF=\"TallyUDF\"> <ADDRESS.LIST TYPE=\"String\"> <ADDRESS>address text</ADDRESS> <ADDRESS>address text</ADDRESS> <ADDRESS>address text</ADDRESS> <ADDRESS>address text</ADDRESS> </ADDRESS.LIST></MESSAGE></DATA></BODY></ENVELOPE>";
            
            // 解码转义的XML内容
            String xmlString = URLDecoder.decode(escapedXml, "UTF-8");
            
            // 构建XML文档对象
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            DocumentBuilder builder = factory.newDocumentBuilder();
            Document doc = builder.parse(new ByteArrayInputStream(xmlString.getBytes()));
            
            // 查找所有ADDRESS.LIST节点(这里假设只有一个)
            NodeList addressListNodes = doc.getElementsByTagName("ADDRESS.LIST");
            if (addressListNodes.getLength() > 0) {
                Element addressList = (Element) addressListNodes.item(0);
                // 获取所有ADDRESS子节点
                NodeList addresses = addressList.getElementsByTagName("ADDRESS");
                
                // 遍历输出每个地址
                for (int i = 0; i < addresses.getLength(); i++) {
                    Element addressElem = (Element) addresses.item(i);
                    System.out.println(addressElem.getTextContent().trim());
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Java的getElementsByTagName方法可以直接处理带.的节点名,无需特殊语法。

关键注意点

  • 转义字符处理:你的原始XML字符串是HTML转义后的,必须先解码才能正常解析;
  • 特殊节点名:当节点名包含.这类特殊字符时,部分语言需要用字符串形式访问(比如PHP的{'ADDRESS.LIST'});
  • 命名空间:如果后续ADDRESS.LIST或其子节点用到了UDF命名空间,需要在解析时注册并指定命名空间前缀。

内容的提问来源于stack exchange,提问作者TejpalBh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:12:51