2014-10-07 106 views
0

我有一个xml,我需要解析并从中获取值。但是,我不确定哪种解析方式对于这种类型的xml来说是最好的。我阅读了不同的方式,但不确定这是否是最好的方式。有人可以帮我写一个Java代码来解析这个XML使用最好的方法? 在此先感谢!使用XPath/DOM/SAX解析XML

这里的XML:

<managementDomain> 
    <mtosi:additionalInfo> 
      <mtosi:nvs> 
       <stru:attributeName>Managed Device Name</stru:attributeName> 
       <stru:attributeValue> 
        <nonc:value>al-dcdc-numr-phe-eu</nonc:value> 
       </stru:attributeValue> 
      </mtosi:nvs> 
      <mtosi:nvs> 
       <stru:attributeName>NMDBF</stru:attributeName> 
       <stru:attributeValue> 
        <nonc:value>Y</nonc:value> 
       </stru:attributeValue> 
      </mtosi:nvs> 
      <mtosi:nvs> 
       <stru:attributeName>BFGCustrID</stru:attributeName> 
       <stru:attributeValue> 
        <nonc:value>3444</nonc:value> 
       </stru:attributeValue> 
      </mtosi:nvs> 
      <mtosi:nvs> 
       <stru:attributeName>BFGContractID</stru:attributeName> 
       <stru:attributeValue> 
        <nonc:value>12331</nonc:value> 
       </stru:attributeValue> 
      </mtosi:nvs> 
     </mtosi:additionalInfo> 
    <mtosi:mdVendorExtensions> 
     <mtosi:tmf854Version/> 
     <mtosi:extVersion/> 
     <mtosi:extAuthor/> 
    </mtosi:mdVendorExtensions> 
    <mtosi:managedElement> 
     <mtosi:manufacturer> 
      <nonc:ossValue>CISCO</nonc:ossValue> 
     </mtosi:manufacturer> 
     <mtosi:productName> 
      <nonc:value>CISCO2951</nonc:value> 
     </mtosi:productName> 
     <mtosi:meVendorExtensions> 
      <mtosi:tmf854Version/> 
      <mtosi:extVersion/> 
      <mtosi:extAuthor/> 
      <mtosi:managementIPAddress> 
       <mtosi:ipValue> 
        <nonc:value>10.32.22.49</nonc:value> 
       </mtosi:ipValue> 
      </mtosi:managementIPAddress> 
     </mtosi:meVendorExtensions> 
    </mtosi:managedElement> 
</managementDomain> 

我需要获取:

ManagementIpAddress,BFGCustomerId,BFGContractID和托管设备名称从这个XML解析这个XML的

+0

使用['元素#的getElementsByTagName()'](HTTP://文档。 oracle.com/javase/7/docs/api/org/w3c/dom/Element.html#getElementsByTagName%28java.lang.String%29)使用其名称获取标签元素。 – Braj 2014-10-07 08:02:08

+0

你的问题不适合SO,因为它主要是基于意见的。您可以使用您提及的所有技术,以及您使用的所有技术都取决于您以及您的要求和技能。任何技术都应该为这种简单的XML做好准备。此外,我们不为您提供完整的代码 - 请先尝试一下,如果遇到问题,我们很乐意为您提供帮助。 – dirkk 2014-10-07 08:33:25

+0

@dirkk - 如果您可以帮助,并感谢您宝贵的建议,我打破了我的头,直到这里!需要您的专家建议对上述查询请 – 2014-10-09 11:13:07

回答

1

两种可能的方式是DOM4J和SAX。前者的内存密集程度更高,并将完整的文档加载到Java对象结构中。使用SAX,您可以通过流式处理内容并“聆听”您要提取的元素来解析文件。

因此,对于您的具体情况 - 即只读几个元素 - SAX可能是要走的路。

SAX的缺点是,它会引入一些只适用于特定的并且正确(即在最好的情况下经过预先验证的)XML文件的黑客解决方案。使用SAX时,您需要更仔细地编程。

(当然小个XML它不是一个耻辱与DOM4J完全地加载它,如果这是你更方便;)