【问题标题】:parsing Xml with NodeList and DocumentBuilder使用 NodeList 和 DocumentBuilder 解析 XML
【发布时间】:2011-09-30 02:21:15
【问题描述】:

使用 dom 和 DocumentBuilder 解析 xml 有点麻烦。我能够让它工作,但我想我对所有子节点等有点困惑。

这是我正在使用的 XML:

<?xml version="1.0" encoding="utf-8"?>
<LabTests>
    <LabTest type="specialty" name="Anti-FXa activity" id="antiFXa" order="16">
        <values unit="U/mL" default="N/A">
            <value type="increased" val="0">
                <conditions>
                    <condition>Heparin effect</condition>
                </conditions>
            </value>
            <value type="normal" val="">
                <conditions></conditions>
            </value>
            <value type="decreased" val="">
                <conditions></conditions>
            </value>
        </values>
    </LabTest>
    <LabTest type="general" name="aPTT" id="aPTT" order="">
        <values unit="secs" default="N/A">
            <value type="increased" val="">
                <conditions>
                    <condition>Acquired hemophilia</condition>
                    <condition>Acquired vWD</condition>
                    <condition>DIC</condition>
                    <condition>Dysfibrinogenemia</condition>
                    <condition>FI deficiency</condition>
                    <condition>FII deficiency</condition>
                    <condition>FII/IIa inhibitors</condition>
                    <condition>FIX deficiency</condition>
                    <condition>FIX inhibitors</condition>
                    <condition>FV deficiency</condition>
                    <condition>FV inhibitors</condition>
                    <condition>FVIII deficiency</condition>
                    <condition>FX deficiency</condition>
                    <condition>FX inhibitors</condition>
                    <condition>FXI deficiency</condition>
                    <condition>FXI inhibitors</condition>
                    <condition>FXII deficiency</condition>
                    <condition>FXII inhibitors</condition>
                    <condition>Heparin effect</condition>
                    <condition>Liver disease effect</condition>
                    <condition>Lupus anticoagulant</condition>
                    <condition>Monoclonal gammopathy</condition>
                    <condition>Vitamin K deficiency</condition>
                    <condition>vWD type 1</condition>
                    <condition>vWD type 2</condition>
                    <condition>vWD type 3</condition>
                    <condition>Warfarin effect</condition>
                </conditions>
            </value>
            <value type="normal" val="">
                <conditions>
                    <condition>DIC</condition>
                    <condition>Dysfibrinogenemia</condition>
                    <condition>FVII deficiency</condition>
                    <condition>FXIII deficiency</condition>
                    <condition>FVII inhibitors</condition>
                    <condition>Liver disease effect</condition>
                    <condition>Lupus anticoagulant</condition>
                    <condition>Monoclonal gammopathy</condition>
                    <condition>Vitamin K deficiency</condition>
                    <condition>vWD type 1</condition>
                    <condition>vWD type 2</condition>
                    <condition>vWD type 3</condition>
                    <condition>Warfarin effect</condition>
                </conditions>
            </value>
            <value type="decreased" val="">
                <conditions>
                    <condition>DIC</condition>
                </conditions>
            </value>
        </values>
    </LabTest>
</LabTests>

我要做的是抓住每个LabTest 元素,并在每个元素中抓住value 元素(并抓住type 的值),并在@ 987654325@ 元素,抓住所有condition 元素。

最后,我想要Map&lt;String, HashMap&lt;String, ArrayList&lt;String&gt;&gt; 之类的东西,其中String 是LabTest 名称,HashMap 使用type(例如decreased、increased 等)键,然后用 value 类型的条件填充 ArrayList。

够混乱吗?

我认为,基本上,我只需要一个示例,说明如何循环并获取每个 LabTest 及其“值”元素,以及这些“值”元素下的每个“条件”元素。

【问题讨论】:

    标签: java xml dom


    【解决方案1】:

    这应该像你描述的那样工作:

    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    DocumentBuilder builder = factory.newDocumentBuilder();
    
    Document doc = builder.parse("input.xml");
    
    NodeList labTestList = doc.getElementsByTagName("LabTest");
    for (int i = 0; i < labTestList.getLength(); ++i)
    {
        Element labTest = (Element) labTestList.item(i);
        String labTestType = labTest.getAttribute("type");
    
        NodeList valueList = labTest.getElementsByTagName("value");
        for (int j = 0; j < valueList.getLength(); ++j)
        {
            Element value = (Element) valueList.item(j);
            String valueType = value.getAttribute("type");
    
            NodeList conditionList = value.getElementsByTagName("condition");
            for (int k = 0; k < conditionList.getLength(); ++k)
            {
                Element condition = (Element) conditionList.item(k);
                String conditionText = condition.getFirstChild().getNodeValue();
            }
        }
    }
    

    【讨论】:

    • 非常感谢。这太棒了!
    猜你喜欢
    • 1970-01-01
    • 2013-06-25
    • 2014-01-11
    • 2010-09-25
    • 1970-01-01
    • 1970-01-01
    • 2017-10-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多