通过XML第二环空指针?

问题描述 投票:0回答:3

我是新来的Java / XML和我试图解析XML文档。我可以通过节点浏览和获取我很感兴趣,但只要我尝试去通过第二点我得到一个空指针异常的第一个节点的元素。

下面是XML的样本..

<?xml version="1.0" encoding="utf-8"?>
<ICD10CM.index>
  <version>2019</version>
  <title>ICD-10-CM INDEX TO DISEASES and INJURIES</title>
  <letter>
    <title>A</title>
    <mainTerm>
      <title>Aarskog's syndrome</title>
      <code>Q87.1</code>
    </mainTerm>
    <mainTerm>
      <title>Abandonment</title>
      <see>Maltreatment</see>
    </mainTerm>
    <mainTerm>
      <title>Abasia<nemod>(-astasia) (hysterical)</nemod></title>
      <code>F44.4</code>
    </mainTerm>
    <mainTerm>
      <title>Abderhalden-Kaufmann-Lignac syndrome<nemod>(cystinosis)</nemod></title>
      <code>E72.04</code>
    </mainTerm>
    <mainTerm>
      <title>Abdomen, abdominal</title>
      <seeAlso>condition</seeAlso>
      <term level="1">
        <title>acute</title>
        <code>R10.0</code>
      </term>
      <term level="1">
        <title>angina</title>
        <code>K55.1</code>
      </term>
      <term level="1">
        <title>muscle deficiency syndrome</title>
        <code>Q79.4</code>
      </term>
    </mainTerm>
    <mainTerm>
      <title>Abdominalgia</title>
      <see>Pain, abdominal</see>
    </mainTerm>
    <mainTerm>
      <title>Abduction contracture, hip or other joint</title>
      <see>Contraction, joint</see>
    </mainTerm>
<mainTerm>
      <title>Azygos</title>
      <term level="1">
        <title>continuation inferior vena cava</title>
        <code>Q26.8</code>
      </term>
      <term level="1">
        <title>lobe<nemod>(lung)</nemod></title>
        <code>Q33.1</code>
      </term>
    </mainTerm>
  </letter>
  <letter>
    <title>B</title>
    <mainTerm>
      <title>Baastrup's disease</title>
      <see>Kissing spine</see>
    </mainTerm>
    <mainTerm>
      <title>Babesiosis</title>
      <code>B60.0</code>
    </mainTerm>
    <mainTerm>
      <title>Babington's disease<nemod>(familial hemorrhagic telangiectasia)</nemod></title>
      <code>I78.0</code>
    </mainTerm>
    <mainTerm>
      <title>Babinski's syndrome</title>
      <code>A52.79</code>
    </mainTerm>
</letter>
  <letter>
    <title>Z</title>
    <mainTerm>
      <title>Zahorsky's syndrome<nemod>(herpangina)</nemod></title>
      <code>B08.5</code>
    </mainTerm>
    <mainTerm>
      <title>Zellweger's syndrome</title>
      <code>Q87.89</code>
    </mainTerm>
    <mainTerm>
      <title>Zenker's diverticulum<nemod>(esophagus)</nemod></title>
      <code>K22.5</code>
    </mainTerm>
    <mainTerm>
      <title>Ziehen-Oppenheim disease</title>
      <code>G24.1</code>
    </mainTerm>
    <mainTerm>
      <title>Zieve's syndrome</title>
      <code>K70.0</code>
    </mainTerm>
    <mainTerm>
      <title>Zika NOS</title>
      <code>A92.5</code>
      <term level="1">
        <title>congenital</title>
        <code>P35.4</code>
      </term>
    </mainTerm>
    <mainTerm>
      <title>Zinc</title>
      <term level="1">
        <title>deficiency, dietary</title>
        <code>E60</code>
      </term>
      <term level="1">
        <title>metabolism disorder</title>
        <code>E83.2</code>
      </term>
    </mainTerm>
    <mainTerm>
      <title>Zollinger-Ellison syndrome</title>
      <code>E16.4</code>
    </mainTerm>
    <mainTerm>
      <title>Zona</title>
      <see>Herpes, zoster</see>
    </mainTerm>
    <mainTerm>
      <title>Zoophobia</title>
      <code>F40.218</code>
    </mainTerm>
    <mainTerm>
      <title>Zoster<nemod>(herpes)</nemod></title>
      <see>Herpes, zoster</see>
    </mainTerm>
    <mainTerm>
      <title>Zygomycosis</title>
      <code>B46.9</code>
      <term level="1">
        <title>specified NEC</title>
        <code>B46.8</code>
      </term>
    </mainTerm>
    <mainTerm>
      <title>Zymotic</title>
      <see>condition</see>
    </mainTerm>
  </letter>
</ICD10CM.index>

然后我的代码:

 try {
    // Create Results File
    File file = new File("ICD10-Parsed.txt");
    FileWriter fileWriter = new FileWriter(file);    

    //Build XML Document and get from url
    DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
    DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
    Document doc = dBuilder.parse("h:/Application/API/icd10trial.xml");
    doc.getDocumentElement().normalize();

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

    System.out.println("----------------------------");

    System.out.println("Number of nodes " + nList.getLength());
    //Testing Area

    for (int i =0; i<1 /*nList.getLength()*/;){
        Node cNode = nList.item(i);
        System.out.println("\nCurrent Element: " + cNode.getNodeName());

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

            Element eElement = (Element) cNode;
            System.out.println("Letter: " + eElement.getElementsByTagName("mainTerm").item(i).getTextContent());

            NodeList lList = eElement.getElementsByTagName("mainTerm");
             for (int x =0; x<lList.getLength();){
                 Node tNode = lList.item(x);

                if (cNode.getNodeType() == Node.ELEMENT_NODE) {
                    String condition ="";
                    Element tElement = (Element) tNode;
                    NodeList tList = tElement.getElementsByTagName("title");

                    //Get Condition
                    NodeList elements = tElement.getElementsByTagName("title");
                    Node item = elements.item(i);
                    condition = item.getTextContent();
                    //condition = tElement.getElementsByTagName("title").item(i).getTextContent();
                    System.out.println("Condition: " + condition);
                    fileWriter.write(condition +";");     
                }
               x++;
            }
        }

        System.out.println("----------------------------");
        i++;
    }


    fileWriter.flush();
    fileWriter.close();

}catch (Exception e) {
        e.printStackTrace();
    }   

如果我使用的(INT = 0; INT <1)得到以下输出的正常工作:

    Root element :ICD10CM.index
----------------------------
Number of nodes 3

Current Element: letter
Letter: 
      Aarskog's syndrome
      Q87.1

Condition: Aarskog's syndrome
Condition: Abandonment
Condition: Abasia(-astasia) (hysterical)
Condition: Abderhalden-Kaufmann-Lignac syndrome(cystinosis)
Condition: Abdomen, abdominal
Condition: Abdominalgia
Condition: Abduction contracture, hip or other joint
Condition: Azygos
----------------------------
BUILD SUCCESSFUL (total time: 0 seconds)

然而此刻我更改为(INT = 0; INT <2)得到以下输出:

    run:
Root element :ICD10CM.index
----------------------------
Number of nodes 3

Current Element: letter
Letter: 
      Aarskog's syndrome
      Q87.1

java.lang.NullPointerException
Condition: Aarskog's syndrome
Condition: Abandonment
Condition: Abasia(-astasia) (hysterical)
Condition: Abderhalden-Kaufmann-Lignac syndrome(cystinosis)
Condition: Abdomen, abdominal
Condition: Abdominalgia
Condition: Abduction contracture, hip or other joint
Condition: Azygos
----------------------------

    at icd10parse.ICD10Parse.main(Current Element: letter
ICD10Parse.java:71)
Letter: 
      Babesiosis
      B60.0

BUILD SUCCESSFUL (total time: 0 seconds)

我在想什么?

谢谢!

java xml
3个回答
3
投票

一般而言找到一条线一个空指针更改该行所有呼叫到自己的路线。

因此,这condition = tElement.getElementsByTagName("title").item(i).getTextContent();会变成这样:

NodeList elements = tElement.getElementsByTagName("title");
Node item = elements.item(i);
condition = item.getTextContent();

这样,你会看到它的各个部分导致了异常,您可以缩小搜索范围。作为科尔姆在his answer你的错误中提到最有可能是在这种情况下i使用.item(i)的。所以这个答案的目标是更多的帮助你下一次弄明白。


2
投票

可能的原因。您正在使用的索引我引用一个“称号”元素。但该指数i是你通过“信”的元素使用循环什么。如果你只是想第一个冠军,在下面的行1替换我:

condition = tElement.getElementsByTagName("title").item(i).getTextContent();

0
投票

弄清楚了。我需要的子节点的另一个变量。现在它的伟大工程。这里是工作的代码:

Node cNode = nList.item(0);
            int v = 0;

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

                cNode = nList.item(a);
                System.out.println("\nCurrent Element: " + cNode.getNodeName());
                Element aElement = (Element) cNode;
                System.out.println("Current Letter: " + aElement.getElementsByTagName("title").item(v).getTextContent());


                //For each Node, get sub-nodes
                    NodeList lList = aElement.getElementsByTagName("mainTerm");
                     for (int x =0; x<lList.getLength();){
                         Node tNode = lList.item(x);

                        if (cNode.getNodeType() == Node.ELEMENT_NODE) {
                            String condition ="";
                            Element tElement = (Element) tNode;
                            NodeList tList = tElement.getElementsByTagName("title");

                            //Get Condition
                            NodeList elements = tElement.getElementsByTagName("title");
                            Node item = elements.item(v);
                            condition = item.getTextContent();
                            //condition = tElement.getElementsByTagName("title").item(i).getTextContent();
                            System.out.println("Condition: " + condition);
                            fileWriter.write(condition +";");     
                        }
                       x++;
                    }
                     a++; 
                }

作为一个侧面说明,而不是使用变量v我可能只是将它们设置为0。

© www.soinside.com 2019 - 2024. All rights reserved.