我有一个如下所示的 xml。
<user VERSION_NO="1">
<userCompany QTAG="30000-9" LITERAL="Pharmaxy Group" CA_ID="33">PG</userCompany></user>
其中“user”是我的父级 USER DTO,在 DTO 中我有“userCompany”等属性。
我正在访问一个 webservice(soap) ,我得到了上面的响应。基于“Literal”值,我需要执行一些业务逻辑并设置为我的 USER DTO。
那么如何使用 STAX 读取“LITERAL”值?
最佳答案
首先您需要了解一些技术术语。在 XML
中,您的 userCompany
是一个元素,而 LITERAL
是该元素的一个属性。
使用StAX
,您首先会从 XMLInputFactory 获得一个阅读器。我更喜欢 XMLEventReader
。该读取器能够迭代给定 XML
中的所有 XML
元素。如果您找到了想要的StartElement - userCompany
在您的情况下 - 那么您可以从中获取名为“LITERAL”的属性的值。
对于命名 XML
元素和属性,使用 QName
而不是简单的 String
。这是因为 QName
能够考虑不同的 namespace 。
示例:
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
}
}
}
}
}
关于java - 如何在 JAVA 中使用 STAX 解析器读取标签内的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59561930/