-1

我正在从 XML 文档中读取 DMX 值。该方法仅从我试图从中提取的元素中返回一个节点,但应该有 512。

这是方法:

public static void readXML(int cueNo){
        try {

            File fXmlFile = new File(MixWindow.Globals.fileLoc);
            DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
            Document doc = dBuilder.parse(fXmlFile);
            doc.getDocumentElement().normalize();

            System.out.println("Root element :" + doc.getDocumentElement().getNodeName());
            NodeList nList = doc.getElementsByTagName("Cue");
            System.out.println("-----------------------");

            for (int temp = 0; temp < nList.getLength(); temp++) {

               Node nNode = (Node) nList.item(temp);
               if (nNode.getNodeType() == Node.ELEMENT_NODE) {

                  Element eElement = (Element) nNode;

                  System.out.println("Cue Name : " + getTagValue("Cue_Name", eElement));
                  System.out.println("Cue Number : " + getTagValue("Cue_Number", eElement));
                      //System.out.println("Nick Name : " + getTagValue("nickname", eElement));
                  //System.out.println("Salary : " + getTagValue("salary", eElement));

               }


            }
            NodeList nListII = doc.getElementsByTagName("DMX");
            //nListII = doc.getElementsByTagName("DMX");
            System.out.println("-----------------------");
            int length = nListII.getLength();
            System.out.println("DMX Length:  " + length);
            for (int tempII = 0; tempII < nListII.getLength(); tempII++) {

                   Node nNodeII = (Node) nListII.item(tempII);
                   if (nNodeII.getNodeType() == Node.ELEMENT_NODE) {

                      Element eElement = (Element) nNodeII;

                      System.out.println("DMX Chnl: " + getTagValue("DMX_Chnl", eElement));
                      System.out.println("DMX Val: " + getTagValue("DMX_Val", eElement));
                          //System.out.println("Nick Name : " + getTagValue("nickname", eElement));
                      //System.out.println("Salary : " + getTagValue("salary", eElement));

                   }


                }

          } catch (Exception e) {
            e.printStackTrace();
          }
    }
        private static String getTagValue(String sTag, Element eElement) {
            NodeList nlList = eElement.getElementsByTagName(sTag).item(0).getChildNodes();

            Node nValue = (Node) nlList.item(0);

            return nValue.getNodeValue();
        }
    }

这是 XML 文件的一部分:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<ShowFile>
<Cue>
<Cue_Name>stuff and junk</Cue_Name>
<Cue_Number>1</Cue_Number></Cue>
<DMX>
<DMX_Chnl>1</DMX_Chnl>
    <DMX_Val>0</DMX_Val>
<DMX_Chnl>2</DMX_Chnl>
    <DMX_Val>0</DMX_Val>
<DMX_Chnl>3</DMX_Chnl>
    <DMX_Val>0</DMX_Val>
<DMX_Chnl>4</DMX_Chnl>
        <DMX_Val>0</DMX_Val>
......
    <DMX_Chnl>512</DMX_Chnl>
        <DMX_Val>0</DMX_Val>

System.out 创建了这个:

Cue Name : stuff and junk
Cue Number : 1
-----------------------
DMX Length:  1
DMX Chnl: 1
DMX Val : 0

我究竟做错了什么?

缩短的 xml:

<?xml version="1.0" encoding="UTF-8" standalone="no"?><ShowFile><Cue><Cue_Name>Stuff and Junk</Cue_Name><Cue_Number>1</Cue_Number></Cue><DMX><DMX_Chnl>1</DMX_Chnl><DMX_Val>0</DMX_Val><DMX_Cue>1</DMX_Cue><DMX_Chnl>2</DMX_Chnl><DMX_Val>0</DMX_Val><DMX_Cue>1</DMX_Cue><DMX_Chnl>3</DMX_Chnl><DMX_Val>0</DMX_Val><DMX_Cue>1</DMX_Cue><DMX_Chnl>4</DMX_Chnl></DMX></ShowFile>

添加循环:

if (nNodeII.getNodeType() == Node.ELEMENT_NODE) {

                      Element eElement = (Element) nNodeII;

                      NodeList childNodes = nNodeII.getChildNodes();
                        String result = new String();
                        for (int i = 0; i < childNodes.getLength(); i++) {
                          Node node = childNodes.item(i);
                      String dcName = node.getNodeName();
                      String dcVal = node.getNodeValue();
                      System.out.println("DMX stuff:  " + dcName + " " + dcVal);
                                                }
                   }
4

1 回答 1

2

Java 和 XML 解析器的行为正确。

但是您希望文档具有与实际不同的结构!所以你在错误的地方寻找节点,因此没有在那里找到节点。

只有一个 DMX元素。您想枚举children,而不是 DMX 元素。(即你想要有 DMX_Chnl 元素,并且这些元素并不都包含在单独的 DMX 节点中)

于 2012-12-08T16:43:56.070 回答