【问题标题】:How to read values inside a tag using STAX parser in JAVA如何在 JAVA 中使用 STAX 解析器读取标签内的值
【发布时间】:2020-01-02 10:38:57
【问题描述】:

我有一个如下所示的 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) ,在那里我得到了如上的响应。基于“文字”值,我需要执行一些业务逻辑并设置为我的 USER DTO。

那么如何使用 STAX 读取“LITERAL”值?

【问题讨论】:

    标签: java xml-parsing stax


    【解决方案1】:

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

    使用StAX,您首先会得到来自XMLInputFactory 的读者。我更喜欢XMLEventReader。该阅读器能够遍历给定XML 中的所有XML 元素。如果您找到了所需的StartElement - 在您的情况下为userCompany - 那么您可以从中获取名为“LITERAL”的属性的值。

    为了命名XML 元素和属性,使用QNames 而不是简单的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
        }
       }
      }
     }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-20
      • 1970-01-01
      • 2015-12-29
      • 1970-01-01
      • 2016-10-30
      • 2012-03-20
      • 1970-01-01
      相关资源
      最近更新 更多