我目前正在开发一个程序,它从组合框(通过.getSelectedIndex())中选择'data type‘的值,然后向下钻取到'first record’并将其作为字符串数组返回。
组合框由相同的XML文件填充,我使用DOM解析器用Java编写代码。
XML代码片段:
<?xml version="1.0" encoding="UTF-8"?>
<dealershipParsers>
<Parser id="ADPParser2">
<data type="Sales" />
<first record = "DEAL-NO"/>
<data type="Service" />
<first record ="RO"/>
<data type="Email" />
<first record ="CONTROL"/>
</Parser>我目前正在使用的Java代码尝试获取和返回“第一条记录”:
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = factory.newDocumentBuilder();
Document document = docBuilder.parse(fileName);
//Searches all text
document.getDocumentElement().normalize();
//Gets elements from xml
Element elementArray = document.getDocumentElement();
NodeList listResources = elementArray.getElementsByTagName("Parser");
Element elemChild = (Element) listResources.item(item);
NodeList dataChildren = elemChild.getElementsByTagName("data");
Element elemFirst = (Element) dataChildren.item(item);
NodeList firstChildren = elemFirst.getElementsByTagName("first");
int tam = firstChildren.getLength();
String[] vecResources = new String[tam];
for (int i = 0; i < tam; i++)
{
Element elem = (Element) firstChildren.item(0);
vecResources[i] = elem.getAttribute("record"); // change to type
}
//returns an array with all the types of data
return vecResources;我已经成功地指出了我的问题是在“dataChildren”,“elemFirst”和“firstChildren”之间的某个地方。'dataChildren‘中有一个计数,但当我在netbeans中进行调试时,它显示'tam’等于0,就像'firstChildren‘一样。
为什么它不能将值从一个节点列表传递到另一个节点列表?我遗漏了什么?
任何建议都将不胜感激。
发布于 2013-07-10 02:31:34
您的XML结构与您的代码“期望的”不匹配。您的代码似乎期望一个分层的XML输入,其中每个Parser包含data节点,每个data包含first节点:
<Parser id="ADPParser2">
<data type="Sales">
<first record="DEAL-NO" />
</data>
<data type="Service">
<first record="RO" />
</data>
<data type="Email">
<first record="CONTROL" />
</data>
</Parser>但是,您的XML输入是平面的:data和first节点是Parser的直接子节点。您的缩进似乎表明并非如此(这可能导致了这种混乱),但它实际上等同于:
<Parser id="ADPParser2">
<data type="Sales" />
<first record="DEAL-NO" />
<data type="Service" />
<first record="RO" />
<data type="Email" />
<first record="CONTROL" />
</Parser>我可以看到两种解决方案:
https://stackoverflow.com/questions/17555438
复制相似问题