假设通过 WebService 访问返回的 XML 字符串如下:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<getWeatherbyCityNameResponse xmlns="http://WebXml.com.cn/">
<getWeatherbyCityNameResult>
<string>直辖市</string>
<string>上海</string>
<string>58367</string>
<string>58367.jpg</string>
<string>2023/5/5 17:27:06</string>
<string>17℃/25℃</string>
<string>5月5日 中雨转阴</string>
<string>西南风转西风3-4级</string>
<string>8.gif</string>
<string>2.gif</string>
<string>今日天气实况:气温:24℃;风向/风力:西南风 1级;湿度:84%;紫外线强度:最弱。</string>
<string>感冒指数:较易发,天凉,湿度大,较易感冒。
运动指数:较不宜,有降水,推荐您在室内进行休闲运动。
过敏指数:不易发,除特殊体质,无需担心过敏问题。
穿衣指数:舒适,建议穿长袖衬衫单裤等服装。
洗车指数:不宜,有雨,雨水和泥水会弄脏爱车。
紫外线指数:最弱,辐射弱,涂擦SPF8-12防晒护肤品。</string>
<string>16℃/23℃</string>
<string>5月6日 小雨</string>
<string>北风小于3级</string>
<string>7.gif</string>
<string>7.gif</string>
<string>14℃/20℃</string>
<string>5月7日 阴</string>
<string>东北风小于3级</string>
<string>2.gif</string>
<string>2.gif</string>
<string>上海简称:沪,位置:上海地处长江三角洲前缘,东濒东海,南临杭州湾,西接江苏,浙江两省,北界长江入海,正当我国南北岸线的中部,北纬31°14′,东经121°29′。面积:总面积7823.5平方公里。人口:人口1000多万。上海丰富的人文资源、迷人的城市风貌、繁华的商业街市和欢乐的节庆活动形成了独特的都市景观。游览上海,不仅能体验到大都市中西合壁、商儒交融、八方来风的氛围,而且能感受到这个城市人流熙攘、车水马龙、灯火璀璨的活力。上海在中国现代史上占有着十分重要的地位,她是中国共产党的诞生地。许多震动中外的历史事件在这里发生,留下了众多的革命遗迹,处处为您讲述着一个个使人永不忘怀的可歌可泣的故事,成为包含民俗的人文景观和纪念地。在上海,每到秋祭,纷至沓来的人们在这里祭祀先烈、缅怀革命历史,已成为了一种风俗。大上海在中国近代历史中,曾是风起云涌可歌可泣的地方。在这里荟萃多少风云人物,散落在上海各处的不同住宅建筑,由于其主人的非同寻常,蕴含了耐人寻味的历史意义。这里曾留下许多革命先烈的足迹。瞻仰孙中山、宋庆龄、鲁迅等故居,会使您产生抚今追昔的深沉遐思,这里还有无数个达官贵人的住宅,探访一下李鸿章、蒋介石等人的公馆,可以联想起主人那段显赫的发迹史。</string>
</getWeatherbyCityNameResult>
</getWeatherbyCityNameResponse>
</soap:Body>
</soap:Envelope>
使用 DOM 解析方式处理相关代码:
import org.slf4j.*;
import org.w3c.dom.*;
import org.xml.sax.InputSource;
import javax.xml.parsers.*;
import java.io.StringReader;
/**
* XML 数据处理
* @param xmlStr 为需要处理的 XML 数据(本文中为上面的 XML 字符串)
* @return
*/
private String xmlToString( String xmlStr ) {
StringBuilder result = new StringBuilder();
try {
// 使用 DOM 解析器解析 XML 数据
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
InputSource inputSource = new InputSource( new StringReader( xmlStr ) );
Document doc = dBuilder.parse( inputSource );
// 处理根节点
doc.getDocumentElement().normalize();
// 处理子节点
NodeList nList = doc.getElementsByTagName( "getWeatherbyCityNameResult" );
for ( int i = 0; i < nList.getLength(); i++ ) {
Node nNode = nList.item(i);
if ( Node.ELEMENT_NODE == nNode.getNodeType() ) {
Element eElement = ( Element ) nNode;
String content = eElement.getTextContent();
result.append( content + " " );
}
}
log.info( "XML 格式处理数据: " + result);
} catch ( Exception e ) {
log.error( "XML 格式处理异常: ", e );
}
return result.toString();
}
也可以使用 hutool
类库提供的 XmlUtil 工具来处理,示例代码如下:
pom.xml
引入依赖
<!-- hutool 工具jar 文档网址:https://www.hutool.cn/docs/#/ -->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.4.3</version>
</dependency>
处理代码:
import cn.hutool.core.util.XmlUtil;
import org.slf4j.*;
import org.w3c.dom.*;
/**
* XML 数据处理 (使用 hutool XmlUtil 工具处理 )
* @param xmlStr 为需要处理的 XML 数据(本文中为上面的 XML 字符串)
* @return
*/
private String xmlToString( String xmlStr ) {
StringBuilder result = new StringBuilder();
try {
// 解析 XML 字符串为 Document 对象
Document doc = XmlUtil.parseXml( xmlStr );
// 获取 XML 文档的根节点
Element rootElement = XmlUtil.getRootElement( doc );
// 根据节点名获得子节点列表
NodeList nList = rootElement.getElementsByTagName( "getWeatherbyCityNameResult" );
for ( int i = 0; i < nList.getLength(); i++ ) {
Node nNode = nList.item(i);
if ( Node.ELEMENT_NODE == nNode.getNodeType() ) {
Element eElement = ( Element ) nNode;
String content = eElement.getTextContent();
result.append( content + " " );
}
}
log.info( "XML 格式处理数据: " + result);
} catch ( Exception e ) {
log.error( "XML 格式处理异常: ", e );
}
return result.toString();
}
最终处理效果:
{
"code": 200,
"msg": "操作成功",
"data": "直辖市上海5836758367.jpg2023/5/6 10:40:1515℃/23℃5月6日 小雨北风小于3级7.gif7.gif今日天气实况:气温:21℃;风向/风力:东北风 1级;湿度:77%;紫外线强度:最弱。感冒指数:较易发,天凉,湿度大,较易感冒。\n运动指数:较不宜,有降水,推荐您在室内进行休闲运动。\n过敏指数:较易发,外出需远离过敏源,适当采取防护措施。\n穿衣指数:较舒适,建议穿薄外套或牛仔裤等服装。\n洗车指数:不宜,有雨,雨水和泥水会弄脏爱车。\n紫外线指数:最弱,辐射弱,涂擦SPF8-12防晒护肤品。\n14℃/19℃5月7日 小雨转阴东北风小于3级7.gif2.gif14℃/21℃5月8日 阴转多云东北风小于3级2.gif1.gif上海简称:沪,位置:上海地处长江三角洲前缘,东濒东海,南临杭州湾,西接江苏,浙江两省,北界长江入海,正当我国南北岸线的中部,北纬31°14′,东经121°29′。面积:总面积7823.5平方公里。人口:人口1000多万。上海丰富的人文资源、迷人的城市风貌、繁华的商业街市和欢乐的节庆活动形成了独特的都市景观。游览上海,不仅能体验到大都市中西合壁、商儒交融、八方来风的氛围,而且能感受到这个城市人流熙攘、车水马龙、灯火璀璨的活力。上海在中国现代史上占有着十分重要的地位,她是中国共产党的诞生地。许多震动中外的历史事件在这里发生,留下了众多的革命遗迹,处处为您讲述着一个个使人永不忘怀的可歌可泣的故事,成为包含民俗的人文景观和纪念地。在上海,每到秋祭,纷至沓来的人们在这里祭祀先烈、缅怀革命历史,已成为了一种风俗。大上海在中国近代历史中,曾是风起云涌可歌可泣的地方。在这里荟萃多少风云人物,散落在上海各处的不同住宅建筑,由于其主人的非同寻常,蕴含了耐人寻味的历史意义。这里曾留下许多革命先烈的足迹。瞻仰孙中山、宋庆龄、鲁迅等故居,会使您产生抚今追昔的深沉遐思,这里还有无数个达官贵人的住宅,探访一下李鸿章、蒋介石等人的公馆,可以联想起主人那段显赫的发迹史。 ",
"datas": {}
}