如何在 JAVA 中使用 STAX 解析器读取标记中的值



我有一个像下面这样的xml。

<user VERSION_NO="1">
<userCompany QTAG="30000-9" LITERAL="Pharmaxy Group" CA_ID="33">PG</userCompany></user>

其中"用户"是我的父用户 DTO,在 DTO 中,我有"用户公司"等属性。

我正在点击一个网络服务(肥皂(,在那里我得到了上面的响应。基于"文字"值,我需要执行一些业务逻辑并设置为我的用户 DTO。

那么如何使用 STAX 读取"文字"值呢?

首先,您需要了解一些技术术语。在XML您的userCompany是一个元素,而LITERAL是该元素的属性。

使用StAX首先从XMLInputFactory获得读取器。我更喜欢XMLEventReader.该阅读器能够迭代给定XML中的所有XML元素。如果您找到了想要的 StartElement - 在您的情况下userCompany- 那么您可以从中获取名为"LITERAL"的属性的值。

对于元素和属性XML的命名QName使用简单的Strings。这是因为QName能够考虑不同的命名空间。

例:

import java.io.StringReader;
import javax.xml.stream.*;
import javax.xml.stream.events.*;
import javax.xml.namespace.QName;
public class StAXGetAttributeValue {
static String getAttributeValue(StartElement startElement, QName attributeName) {
Attribute attribute = startElement.getAttributeByName(attributeName);
String attributeValue = attribute.getValue();
return attributeValue;
}
public static void main (String args[]) throws Exception {
String xmlString = "<user VERSION_NO="1"><userCompany QTAG="30000-9" LITERAL="Pharmaxy Group" CA_ID="33">PG</userCompany></user>";
XMLEventReader reader = XMLInputFactory.newInstance().createXMLEventReader(new StringReader(xmlString));
while (reader.hasNext()) {
XMLEvent event = reader.nextEvent();
if(event.isStartElement()) {
StartElement startElement = (StartElement)event;
QName startElementName = startElement.getName();  
if("userCompany".equals(startElementName.getLocalPart())) {
String valueOf_LITERAL_Attribute = getAttributeValue(startElement, QName.valueOf("LITERAL"));
System.out.println(valueOf_LITERAL_Attribute); //prints Pharmaxy Group
}
}
}
}
}

最新更新