读取XML中某个子属性的内容,
前言
提示:…………:
xml可扩展标记语言,是一种简单的数据存储语言。
使用一系列简单的标记描述数据,而这些标记可以用方便的方式建立,虽然可扩展标记语言占用的空间比二进制数据要占用更多的空间,但可扩展标记语言极其简单易于掌握和使用。。
提示:以下是本篇文章正文内容,下面案例可供参考
一、xml举例(随便找了个xml和代码中的xml格式无关)
<?xml version="1.0" encoding="UTF-8"?>
<tasks>
<task taskId="40217668982" type="1">
<channelType>1</channelType>
<orgNo>5042</orgNo>
<hostAddress>10207</hostAddress>
<commandId>88</commandId>
<terStipulation>20</terStipulation>
<aut>11</aut>
<terminalId>20190907</terminalId>
<terAddress>19960816</terAddress>
<addrType>1</addrType>
<pwScheme>0</pwScheme>
<pw>0</pw>
<measurePointNum>0</measurePointNum>
<dataItem dataItemId="32000"/>
<measurePoints>
<measurePoint id="1" meterProperty=""/>
</measurePoints>
</task>
</tasks>
二、直接上样例代码?
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import java.io.StringReader;
public class getXMLValue {
public static String getvaluexml(String xmlString){
String value ="";
// 创建 SAXReader 对象
SAXReader reader = new SAXReader();
try {
// 使用 SAXReader 读取 XML 字符串并解析为 Document 对象
Document document = reader.read(new StringReader(xmlString));
// 使用 XPath 表达式获取 operator 元素的 value 属性
Element operatorElement = (Element) document.selectSingleNode("/tasks/task/results/result/dataItem/subpara");
if (operatorElement != null) {
// 获取 value 属性的值
value = operatorElement.attributeValue("value");
if(value!=""&&value!=null)
{
System.out.println("value中的值为: " + value);
int firstZeorIndex=value.indexOf('0');
if(firstZeorIndex!=-1)
{
System.out.println("第一个0所在下标为"+firstZeorIndex);
}
else {
System.out.println("没有0");
}
}
else {
value=operatorElement.attributeValue("errCode");
}
} else {
Element ERROR1 = (Element) document.selectSingleNode("/tasks/task/exception");
value = ERROR1.attributeValue("code");
}
} catch (DocumentException e) {
e.printStackTrace();
}
return value;
}
public static void main(String[] args) {
String xmlString = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><tasks> <task id=\"1608016320\" pri=\"0\" ver=\"0\"> <terminalId>10661783</terminalId> <exception code=\"-1\">-1-6终端[10661783]当前不在线!</exception> <excuteTime>27</excuteTime> </task></tasks>";
String xmlerror1="<?xml version=\"1.0\" encoding=\"UTF-8\"?><tasks><task id=\"1708201303\" pri=\"0\" ver=\"0\"><excuteTime>353</excuteTime><receiveFrameTime>20230828181942</receiveFrameTime><results><result terminalId=\"10661783\"><para id=\"terminalAddress\" value=\"17\"/><para id=\"hostAddress\" value=\"0\"/><para id=\"townSn\" value=\"0\"/><para id=\"measurePointNum\" value=\"0\"/><dataItem id=\"1877\"><subpara errCode=\"255\"/></dataItem></result></results></task></tasks>";
String xmlerror2="<?xml version=\"1.0\" encoding=\"UTF-8\"?><tasks><task id=\"1708201303\" pri=\"0\" ver=\"0\"><excuteTime>353</excuteTime><receiveFrameTime>20230828181942</receiveFrameTime><results><result terminalId=\"10661783\"><para id=\"terminalAddress\" value=\"17\"/><para id=\"hostAddress\" value=\"0\"/><para id=\"townSn\" value=\"0\"/><para id=\"measurePointNum\" value=\"0\"/><dataItem id=\"1877\"><subpara value=\"1111111111111111110000000000000000000000000\"/></dataItem></result></results></task></tasks>";
String testxml="ss";
System.out.println("错误1:");
String value= getXMLValue.getvaluexml(xmlString);
System.out.println(value);
System.out.println("错误2:");
String value2= getXMLValue.getvaluexml(xmlerror1);
System.out.println(value2);
System.out.println("正确:");
String value3= getXMLValue.getvaluexml(xmlerror2);
System.out.println(value3);
/* String value4= getXMLValue.getvaluexml(testxml);*/
}
}
总结
提示:示例代码要根据你索要用的xml格式和你要取值的路径进行更改才可以用,我这里是示例了如下场景,某某某反馈三种xml,只有其中一种xml是正确的,有两种是错的,错误1xml和正确的xml结构一致,但所求子节点里的内容没有所要的value,只有一个errorcode,错误2xml和正确的xml结构不一样,且存在一个errorcode