Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 节点列表未填充_Java_Xml_Dom_Getelementsbytagname_Xmlnodelist - Fatal编程技术网

Java 节点列表未填充

Java 节点列表未填充,java,xml,dom,getelementsbytagname,xmlnodelist,Java,Xml,Dom,Getelementsbytagname,Xmlnodelist,我目前正在开发一个程序,该程序接受从组合框中选择的“数据类型”的值(通过.getSelectedIndex()),然后深入到“第一条记录”并将其作为字符串数组返回 组合框由相同的XML文件填充,我正在使用DOM解析器用Java编码 XML代码段: <?xml version="1.0" encoding="UTF-8"?> <dealershipParsers> <Parser id="ADPParser2"> <data type

我目前正在开发一个程序,该程序接受从组合框中选择的“数据类型”的值(通过.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;
DocumentBuilderFactory=DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder=factory.newDocumentBuilder();
Document=docBuilder.parse(文件名);
//搜索所有文本
document.getDocumentElement().normalize();
//从xml获取元素
Element elementArray=document.getDocumentElement();
NodeList listResources=elementArray.getElementsByTagName(“解析器”);
Element elemChild=(Element)listResources.item(item);
NodeList dataChildren=elemChild.getElementsByTagName(“数据”);
elementelemfirst=(Element)dataChildren.item(item);
NodeList firstChildren=elemFirst.getElementsByTagName(“first”);
int tam=firstChildren.getLength();
字符串[]向量资源=新字符串[tam];
for(int i=0;i
我已经设法指出了我的问题是在“dataChildren”、“elemFirst”和“firstChildren”之间的转换dataChildren'中有一个计数,但当我在netbeans中进行调试时,它显示'tam'与'firstChildren'一样等于0

为什么它不能将值从一个节点列表传递到另一个节点列表?我错过了什么


如有任何建议,将不胜感激

您的XML结构与您的代码“期望”不匹配。您的代码似乎需要分层XML输入,其中每个
解析器
保存
数据
节点,每个
数据
保存
第一个
节点:

<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输入的结构固定为层次结构,就像代码所期望的那样
  • 将您的代码修复为使用“扁平”样式(尽管我认为这不是您想要的)

哦。我的。真不敢相信我错过了!我已经盯着这个愚蠢的东西看了一个星期,想弄明白它!当然可以!啊,谢谢,谢谢!!成功了!我同意第一个建议,将我的XML结构固定为层次结构。@senex_潜意识不客气。下一次你可能想早点寻求帮助,没必要在这件事上纠缠整整一周-P
<Parser id="ADPParser2">
    <data type="Sales" />
    <first record="DEAL-NO" />
    <data type="Service" />
    <first record="RO" />
    <data type="Email" />
    <first record="CONTROL" />
</Parser>