引自免费微信小程序:皆我百晓生
要在Java后端中接收XML格式的数据,并获取其中的head和body值,可以使用Java的XML解析库进行解析。以下是使用DOM解析方式的示例代码:
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;
public class XmlParser {
public static void main(String[] args) {
String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n" +
"<msg>\n" +
" <head>\n" +
" <msgId>12121</msgId>\n" +
" <msgName>H2121字典</msgName>\n" +
" <sourceSysCode>S0281</sourceSysCode>\n" +
" <targetSysCode/>\n" +
" <createTime>202012301732121425</createTime>\n" +
" <version>0</version>\n" +
" </head>\n" +
" <body>\n" +
" <row action=\"update\">\n" +
" <ctlocRowid>4731</ctlocRowid>\n" +
" <ctlocCode>199421212</ctlocCode>\n" +
" <ctlocName>YBZ</ctlocName>\n" +
" <hospitalRowid>-2</hospitalRowid>\n" +
" <hospitalCode>121</hospitalCode>\n" +
" <hospitalName>附属医院</hospitalName>\n" +
" <ctlocType>W1</ctlocType>\n" +
" <depRowid>123</depRowid>\n" +
" <depCode>221</depCode>\n" +
" <depName>干部心1</depName>\n" +
" <validDate>2009-05-22 12:00:00</validDate>\n" +
" <invalidDate>2010-01-18 12:00:00</invalidDate>\n" +
" <medicalAble>N</medicalAble>\n" +
" </row>\n" +
" </body>\n" +
"</msg>";
try {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(new InputSource(new StringReader(xml)));
Element root = doc.getDocumentElement();
// 获取head节点的值
NodeList headList = root.getElementsByTagName("head");
Element headElement = (Element) headList.item(0);
String msgId = headElement.getElementsByTagName("msgId").item(0).getTextContent();
String msgName = headElement.getElementsByTagName("msgName").item(0).getTextContent();
String sourceSysCode = headElement.getElementsByTagName("sourceSysCode").item(0).getTextContent();
String createTime = headElement.getElementsByTagName("createTime").item(0).getTextContent();
String version = headElement.getElementsByTagName("version").item(0).getTextContent();
// 获取body节点的值
NodeList bodyList = root.getElementsByTagName("body");
Element bodyElement = (Element) bodyList.item(0);
Element rowElement = (Element) bodyElement.getElementsByTagName("row").item(0);
String action = rowElement.getAttribute("action");
// 输出获取到的值
System.out.println("msgId: " + msgId);
System.out.println("msgName: " + msgName);
System.out.println("sourceSysCode: " + sourceSysCode);
System.out.println("createTime: " + createTime);
System.out.println("version: " + version);
System.out.println("action: " + action);
} catch (Exception e) {
e.printStackTrace();
}
}
}
以上代码使用了DOM解析方式,通过DocumentBuilder
解析XML字符串,然后根据节点名称获取相应的值。具体实现过程如下:
- 创建
DocumentBuilderFactory
和DocumentBuilder
实例。 - 使用
DocumentBuilder
解析XML字符串,得到Document
对象。 - 通过
getDocumentElement()
方法获取根节点msg
。 - 通过
getElementsByTagName()
方法获取head
节点的列表,再通过索引item(0)
获取head
节点元素。 - 解析
head
节点下的子节点的值,例如msgId
、msgName
等。 - 通过
getElementsByTagName()
方法获取body
节点的列表,再通过索引item(0)
获取body
节点元素。 - 通过
getElementsByTagName()
和getAttribute()
方法获取row
节点的属性action
的值。
请注意替换代码中的xml
变量为你实际的XML字符串。
运行以上代码,将输出如下结果:
msgId: 12121
msgName: H2121字典
sourceSysCode: S0281
createTime: 202012301732121425
version: 0
action: update
这样你就成功地获取到了XML中head和body的值,以及body中action属性的值。