java - 如何在 JAVA 中使用 STAX 解析器读取标签内的值

标签 java xml-parsing stax

我有一个如下所示的 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/

相关文章:

java - 将 XML 解析为 Java 列表

java - 在 GAE 上解析完全有效的 XML 时出现 "Content is not allowed in prolog"

java - Java 中的证书路径发现

java - 如何获取jtable列中的总和

java - 正则表达式捕获重复内的组

java - @Order 与 @Bean 注释的方法行为

ruby - 如何通过属性值查找元素?

python - 如何从这个复杂而奇怪的 XML 中访问值? (子子子类)

java - 使用 SAX 或 STAX 进行 XML 处理

java - 无法在 Sonar 中解析 'Untrusted XML should be parsed with a local, static DTD'