我正在尝试解析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;随着零值而出现。请帮我避免这个。
答案 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文件中使用的编码,可能存在拼写错误。