使用java中的属性和attr值解析XML

时间:2011-12-13 08:15:58

标签: java xml parsing

我有一种情况来解析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..how我们可以使用它吗????

2 个答案:

答案 0 :(得分:0)

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

  1. JAXB(如果您有模式定义,它将生成对象并自动填充)。

  2. JiBX(另一个不错的选择。您可以定义XML属性到Java对象的自定义映射)

  3. XStream(还允许您将XML属性映射到Java对象)。

答案 1 :(得分:0)

这种方法取决于您的需求。如果要在复杂的业务操作中使用大多数值。可能需要使用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);