我有一个像下面这样的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
使用简单的String
s。这是因为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
}
}
}
}
}