Android XML解析器获取键值对

时间:2015-08-05 10:10:55

标签: android

我正在尝试解析XML文件。 XML文件的格式为:

<Testcase>
    <Title>Low Load</Title>
    <MO_Call>DIAL</MO_Call>
    <Delay>10</Delay>
    <MO_Call>HANGUP</MO_Call>
    <Delay>10</Delay>
    <MO_SMS>SEND</MO_SMS>
</Testcase>

我需要在节点&#34; Testcase&#34;下获取键值对。并存储在数据结构中。订购很重要,因此我考虑使用LinkedHashMap。

请建议从XMl文件中获取键值对的正确方法。 在上面的XML片段中,相应的键值对是: 键:MO_Call,值:DIAL 关键:延迟,价值:10

我编写了以下用于解析XML的代码:

try {
    builder = factory.newDocumentBuilder();
    Document doc = builder.parse(new FileInputStream(CONFIG_PATH));
    doc.getDocumentElement().normalize();
    NodeList nodeList = doc.getElementsByTagName(TAG_TEST_CASE);
    if (nodeList != null && nodeList.getLength() > 0) {
        for (int i=0; i < nodeList.getLength(); i++) {
            Element el = (Element) nodeList.item(i);
            // If title doesn't match, check the next title under next 'Testcase' NodeList
            if(el.getFirstChild().getNodeName().equals(TAG_TITLE) &&
                    !el.getFirstChild().getNodeValue().equals(title)) {
                continue;
            }
            // else, title matches. So parse the child nodes.
            // Start from index 1, since index 0 is title always
            NodeList childNodeList = el.getChildNodes();
            for(int j=1; j < childNodeList.getLength(); j++) {
                Node childNode = childNodeList.item(j);
                //Element childElement = (Element) childNodeList.item(j);
                Log.d("Tool", "key=" +childNode.getNodeName()+ ", value=" +childNode.getTextContent());
            }
        }
    }
}

我得到了输出:

key=Title, value=Low Load
key=#text, value=
key=MO_Call, value=DIAL
key=#text, value=
key=Delay, value=10
key=#text, value=
key=MO_Call, value=HANGUP
key=#text, value=
key=Delay, value=10
key=#text, value=
key=MO_SMS, value=SEND
key=#text, value=
key=Title, value=Medium Load
key=#text, value=
key=Title, value=High Load
key=#text, value=

由于某种原因,关键&#34; #text&#34;随着零值而出现。请帮我避免这个。

1 个答案:

答案 0 :(得分:0)

#text <?xml version="1.0" encoding="UTF-8"?><Testcase><Title>Low Load</Title><MO_Call>DIAL</MO_Call><Delay>10</Delay><MO_Call>HANGUP</MO_Call><Delay>10</Delay><MO_SMS>SEND</MO_SMS></Testcase> 。如果您可以更改XML,请删除所有无意的空格,然后重新测试您的代码。

示例XML:

dat$DOB <- as.Date(dat$DOB, format = "%d-%b-%Y")

另外,请显示XML文件中使用的编码,可能存在拼写错误。

reffer here