在java中使用属性和属性值解析XML

在java中使用属性和属性值解析XML,java,xml,parsing,Java,Xml,Parsing,我的情况是解析一个XML,它在属性和级别上有很多数据来访问XML层次结构中的数据 不知道使用哪种解析器来进行分析是一种有效的分析方法。解析XML以及如何访问属性及其值 我更喜欢DOM解析器并试图解析它,但它有点复杂,因为我需要获得一个标记->然后是一个属性->然后是attr值,在这种情况下需要获得另一个标记访问 <testCodeIdentifier classCode="ROL" > <realmCode code="QD" />

我的情况是解析一个XML,它在属性和级别上有很多数据来访问XML层次结构中的数据

不知道使用哪种解析器来进行分析是一种有效的分析方法。解析XML以及如何访问属性及其值

我更喜欢DOM解析器并试图解析它,但它有点复杂,因为我需要获得一个标记->然后是一个属性->然后是attr值,在这种情况下需要获得另一个标记访问

 <testCodeIdentifier classCode="ROL" >
                <realmCode code="QD" />
                <id assigningAuthorityName="PRMKEY" extension="SJC16494"  />
                <statusCode code="active" /> 
                <playingTestCodeDetails classCode="ENT" determinerCode="INSTANCE" >
                  <realmCode code="QD" />
                  <id assigningAuthorityName="PRMORDCODE" extension="16494"  />
                  <id assigningAuthorityName="TESTNUMINBOOK" extension="16494"  />
                  <code code="16494" codeSystemName="QTIM" displayName="SureSwab Candidiasis" /> 
              <name  use=""></name>
                  <asSeeAlsoCode classCode="ROL" > 
                    <realmCode code="QD" />
                    <code code="7600" displayName="Sample See Also Name" ></code>
                  </asSeeAlsoCode>    
                  <asSeeAlsoCode classCode="ROL" >
                <realmCode code="QD" />
                <code code="6496" displayName="Sample See Also Name" ></code>
                  </asSeeAlsoCode>
                </playingTestCodeDetails>
    </testCodeIdentifier>



上面是示例XML,其中所有属性都作为我遍历它们所需的数据呈现。。。JAXB..我们如何使用它???

如果XML文件的大小不会太大,您可以查看以下选项:

  • (如果您有架构定义,它将为您生成对象并自动填充)

  • (另一个很好的选择。您可以定义XML属性到Java对象的自定义映射)

  • (还允许您将XML属性映射到Java对象)


  • 方法取决于您的需要。如果您打算在复杂的业务操作中使用大多数值。也许用XStream或其他绑定框架加载XML是一种可行的方法。 现在,如果您只对几个值感兴趣,并且希望处理大型XML(或许多小型XML)。Sax解析可能更适合

    这里有一个例子

    final SAXParserFactory factory = SAXParserFactory.newInstance();
    final SAXParser saxParser = factory.newSAXParser();
    
    final DefaultHandler handler = new DefaultHandler() {
    
        @Override
        public void startElement(final String uri, final String localName, final String qName,
                 final Attributes attributes) throws SAXException {
    
             System.out.println("Start Element :" + qName);
    
             if ("realmCode".equals(qName)) {
                 System.out.println(attributes.getValue("code"));
             }
        }
    
        @Override
        public void endElement(final String uri, final String localName, final String qName)
                        throws SAXException {
        }
    
        @Override
        public void characters(final char ch[], final int start, final int length) throws SAXException {
        }
    
      };
    
    
      saxParser.parse(myInputStreamOrFile, handler);
    

    您能提供一个快速示例吗?添加了一个示例XML和需要访问的属性;我目前正在使用DOM解析器,但使用它有点混乱。如果您希望一次获得整个数据,最好使用DOM,这取决于您的需求,但DOM的问题是,大型XML文件需要巨大的内存,如果您希望分段解析数据,则使用SAX解析器两者都是有效的,但DOM比SAXPATH更容易通常是提取你想要的东西的最简单方法。问题是,您还没有说明您想要什么。JAXB(JSR-222)可以从XML模式生成对象模型,就像JiBX和XStream一样,您也可以从对象开始并应用注释来控制类如何映射到XML。JAXB是一个特定的jar;我可以从哪里下载??如何使用它的任何输入???@GOK-JAXB实际上是一个具有多个实现的规范(JSR-222)。JavaSE6中提供了一个实现。我是EclipseLink JAXB(MOXy)的负责人,我们的impl在以下位置提供:其他实现包括Metro和JaxMe。