java - 从字符串中提取 XML 的值
问题描述
我做了一些代码,但它们不起作用。我还需要验证 header:message 是否存在
String xml = "<header:HostError>
<header:message>
<header:messageCode>321</header:messageCode>
<header:message>test</header:message>
</header:message>
<header:message>
<header:messageCode>123</header:messageCode>
<header:message>test</header:message>
</header:message>
</header:HostError>"
如何获得第一条 messageCode 和消息?
private void extractErrorsFromResponse(SOAPFaultDetail faultResponse) {
for (Iterator itr = faultResponse.getAllDetailEntries(); itr.hasNext(); ) {
Object element = itr.next();
if (element instanceof OMElement) {
Object code = ((OMElement) element).getFirstChildWithName(new QName("message")).getFirstChildWithName(new QName("messageCode"));
Object message = ((OMElement) element).getFirstChildWithName(new QName("message")).getFirstChildWithName(new QName("message"));
faultResponse.addDetailEntry(((OMElement) element).cloneOMElement());
}
}
}
解决方案
一个快速的解决方案就是这样。
String xml = "<header:HostError>" +
"<header:message>\n" +
"<header:messageCode>321</header:messageCode>\n" +
"<header:message>test</header:message>\n" +
"</header:message>\n" +
"<header:message>\n" +
"<header:messageCode>123</header:messageCode>\n" +
"<header:message>test</header:message>\n" +
"</header:message>\n" +
"</header:HostError>";
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
Document doc = docBuilder.parse(new InputSource(new StringReader(xml)));
NodeList list = doc.getElementsByTagName("header:messageCode");
System.out.println("First messageCode : " + list.item(0).getFirstChild().getNodeValue());
NodeList list_ = doc.getElementsByTagName("header:message");
System.out.println("First message : " + list_.item(1).getFirstChild().getNodeValue());
它打印,
First messageCode : 321
First message : test
基于此,您需要找到更通用的方法。
推荐阅读
- bootstrap-5 - 文本左侧和图像右侧引导 5 带点的轮播
- google-chrome-devtools - 为什么预检请求有时会出现在 Chrome DevTools 网络选项卡中的主请求之后?
- session - spring cloud gateway并发会话管理
- javascript - 如何正确重新布局图形并以节点为中心
- jenkins - Jenkins MaskPassword:什么是`var`?
- ruby-on-rails - 元编程和引用
- php - 如何在 PHP 中使用十六进制提取 GIF 帧?
- flutter - 如何在 Flutter 中为卡片添加渐变?
- c# - HttpClient 重试逻辑未按预期工作(.Net Core 3.1)
- java - Spock Framework Java测试中的模拟地图参数