我目前正在开发一个程序,该程序获取从组合框中选择的"数据类型"的值(通过.getSelectedIndex()),然后向下钻取"第一条记录"并将其作为字符串数组返回。
组合框由相同的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"one_answers"firstChildren"之间的过渡"dataChildren"中有一个计数,但当我在netbeans中进行调试时,它显示"tam"one_answers"firstChildren"一样等于0。
为什么它不能将值从一个节点列表传递到另一个节点?我错过了什么?
如有任何建议,我们将不胜感激。
您的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>
我可以看到两种解决方案:
- 将XML输入的结构固定为层次结构,就像您的代码所期望的那样
- 修复您的代码以使用"平面"样式(尽管我认为这不是您想要的)