xml 페이지에 대한 구문 분석기를 작성했는데 그 이유를 완전히 이해하지 못하는 이상한 오류가 발생합니다.dom을 사용하여 xml 페이지를 구문 분석하려고 할 때 null 포인터 예외가 발생합니다.
<?xml version="1.0" encoding="UTF-8"?>
<drugs xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://drugbank.ca" xs:schemaLocation="http://www.drugbank.ca/docs/drugbank.xsd" schemaVersion="1.4">
<drug type="biotech" created="2005-06-13 07:24:05 -0600" updated="2012-02-13 17:42:20 -0700" version="3.0">
<drugbank-id>DB00001</drugbank-id>
<name>Lepirudin</name>
<drug-interactions>
<drug-interaction>
<drug>DB01381</drug>
<name>Ginkgo biloba</name>
<description>Additive anticoagulant/antiplatelet effects may increase bleed risk. Concomitant therapy should be avoided.</description>
</drug-interaction>
<drug-interaction>
<drug>DB00374</drug>
<name>Treprostinil</name>
<description>The prostacyclin analogue, Treprostinil, increases the risk of bleeding when combined with the anticoagulant, Lepirudin. Monitor for increased bleeding during concomitant thearpy. </description>
</drug-interaction>
</drug-interactions>
<targets>
<target partner="54">
<actions>
<action>inhibitor</action>
</actions>
</target>
</targets>
</drug>
<partners>
<partner id="54">
<name>Prothrombin</name>
<general-function>Involved in blood clotting cascade</general-function>
</partner>
</partners>
다음
, 당신은 약물 상호 작용 태그를 볼 수 있고 그 안에 상호 작용 약물에 대한 정보가있다 : 첫째로 나는 당신에게 내 XML 페이지를 표시 할. 그래서 약물 상호 작용 태그를 제거하면 파서가 완벽하게 작동하지만 약물 상호 작용 태그가 있으면 NullPointerException이 발생합니다.
오류 라인 :
if(nameElement.getChildNodes().item(0).getNodeValue().equals(str))
내가 여기 파서의 전체 코드를 걸었습니다. 직접 시도해 볼 수도 있습니다. 이 오류가 발생하는 이유는 무엇이며 어떻게 해결할 수 있습니까? 긴 게시물에 대해 유감입니다. 감사합니다
import java.io.File;
import java.util.ArrayList;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class xmlParser {
public static void main(String argv[]) {
getDrug("Lepirudin");
}
public static void getDrug(String str){
ArrayList<String> arr = new ArrayList();
String trgts = "";
try {
File file = new File("test.xml");
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(file);
doc.getDocumentElement().normalize();
System.out.println("Root element " + doc.getDocumentElement().getNodeName());
NodeList drugList = doc.getElementsByTagName("drug");
for (int s = 0; s < drugList.getLength(); s++) {
Node drugNode = drugList.item(s);
if (drugNode.getNodeType() == Node.ELEMENT_NODE) {
Element drugElement = (Element) drugNode;
Element nameElement = (Element) drugElement.getElementsByTagName("name").item(0);
if(nameElement.getChildNodes().item(0).getNodeValue().equals(str)){
System.out.println("Name : " + nameElement.getChildNodes().item(0).getNodeValue());
Element drugNodeElement = (Element) drugElement.getElementsByTagName("drugbank-id").item(0);
System.out.println("ID : " + drugNodeElement.getChildNodes().item(0).getNodeValue());
/////////////////////////////////////////////////
NodeList targetList = (NodeList) drugElement.getElementsByTagName("target");
for(int t=0; t<targetList.getLength(); t++)
{
Node targetNode = targetList.item(t);
if(targetNode.getNodeType() == Node.ELEMENT_NODE)
{
Element targetElement = (Element) targetNode;
if(targetElement.getAttribute("position").equals(""))
{
System.out.println("target partner: " + targetElement.getAttribute("partner"));
}
else
{
System.out.println("target position: "+ targetElement.getAttribute("position")+ "target partner: "+ targetElement.getAttribute("partner"));
}
arr.add(targetElement.getAttribute("partner"));
}
}
System.out.println("-------------------------");
}
}
}
NodeList partnersList = doc.getElementsByTagName("partners");
for (int q = 0; q < partnersList.getLength(); q++)
{
Node partnersNode = partnersList.item(q);
if (partnersNode.getNodeType() == Node.ELEMENT_NODE) {
Element partnersElement = (Element) partnersNode;
NodeList partnerList = (NodeList) partnersElement.getElementsByTagName("partner");
for(int w=0; w<partnerList.getLength(); w++)
{
Node partnerNode = partnerList.item(w);
if(partnerNode.getNodeType() == Node.ELEMENT_NODE)
{
Element partnerElement = (Element) partnerNode;
if(arr.contains(partnerElement.getAttribute("id"))){
Element partnernameElement = (Element) partnerElement.getElementsByTagName("name").item(0);
trgts += partnernameElement.getChildNodes().item(0).getNodeValue() + "," ;
}
}
}
}
}
trgts = trgts.substring(0, trgts.length()-1);
System.out.println(trgts);
} catch (Exception e) {
e.printStackTrace();
}
}
}
"약물 상호 작용"내에서 태그 이름을 변경하면 약물 상호 작용 내에서 "약물"대신 "이름"과 "약물"대신 "이름"을 사용하고 작동하는 것으로 나타났습니다. 왜 파서가 혼란스러워하는지 모르겠다. xml 페이지를 검사 한 결과, "name"이라는 태그가 많이 있지만, 오류가 발생하지 않았습니다. –