使用XPath / DOM / SAX解析XML

时间:2014-10-07 07:53:30

标签: java xml dom xpath sax

我有一个xml,我需要解析并从中获取值。但是,我不确定哪种解析方式对于此类型的xml最佳。我读了不同的方法,但不确定这是否是最好的方式。有人可以帮我写一个java代码,用最好的方法解析这个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>

我需要抓取:

此xml中的ManagementIpAddress,BFGCustomerId,BFGContractID和受管设备名称

1 个答案:

答案 0 :(得分:1)

解析此XML的两种可能方法是DOM4J和SAX。前者占用更多内存,并将完整的文档加载到Java对象结构中。使用SAX,您可以通过流式传输内容和&#34; listen&#34;来解析文件。对于要提取的元素。

因此,对于您的特定情况 - 只读取一些元素 - SAX可能是要走的路。

SAX的缺点是,它引发了一些只能使用特定的 - 并且正确(即在最佳情况下是预先验证的)XML文件的hackish解决方案。使用SAX时需要更仔细地编程。

(当然对于小型XML来说,如果对你来说更方便的话,用DOM4J完全加载它并不是一种耻辱;)