【问题标题】:NullPointerException when importing XML-file into Processing, Java将 XML 文件导入 Java 处理时出现 NullPointerException
【发布时间】:2014-06-13 22:09:43
【问题描述】:

我正在尝试从 XML 文件中获取数据并在处理中使用这些数据。这样做时,我得到了 NPE,但我无法弄清楚我错在哪里。 XML 有好几层,我必须从这个“孩子”获取数据:

http://i62.tinypic.com/2mb90g.png

我的代码如下所示:

XML xml;

void setup(){

xml = loadXML("parker.xml");

XML[] children = xml.getChildren("kml");

XML[] Folder=children[0].getChildren("Folder");

XML[] Placemark=Folder[1].getChildren("Placemark");

XML[] Polygon=Placemark[2].getChildren("Polygon");

XML[] outerBoundaryIs=Polygon[3].getChildren("outerBoundaryIs");

XML[] LinearRing=outerBoundaryIs[4].getChildren("LinearRing");

  for (int i = 0; i < LinearRing.length; i++) {
    float coordinates = children[i].getFloat("coordinates");
    println(coordinates);

  }
}

最好的克里斯

堆栈跟踪:

[致命错误]:1:1:序言中不允许内容。 org.xml.sax.SAXParseException;行号:1;列号:1;内容 在序言中是不允许的。在 com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:257) 在 com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:347) 在 processing.data.XML.(XML.java:187) 在 processing.core.PApplet.loadXML(PApplet.java:6310) 在 processing.core.PApplet.loadXML(PApplet.java:6300) 在 XMLtryout.setup(XMLtryout.java:21) 在 processing.core.PApplet.handleDraw(PApplet.java:2359) 在 processing.core.PGraphicsJava2D.requestDraw(PGraphicsJava2D.java:240) 在 processing.core.PApplet.run(PApplet.java:2254) 在 java.lang.Thread.run(Thread.java:744)

XML 文件:

https://www.dropbox.com/s/xn3thjskhlf2wai/parker.xml

【问题讨论】:

  • 发布您的堆栈跟踪
  • 现在添加到帖子中
  • 我认为您的 xml 格式不正确。您可以发布吗?
  • 您使用的是哪个 XML API? (显然不是 W3C DOM/SAX)
  • XML 文件已添加到帖子中。

标签: java xml class oop processing


【解决方案1】:

这个错误可能是因为在你的 xml 文件的顶部丢失了这个

<?xml version="1.0" encoding="utf-8"?>

或者文件开头有一些不可打印的垃圾。

【讨论】:

  • 嗯。 写在 xml 文件的顶部。所以我想那不是问题。 “垃圾”可能是 xml 文件开头的 HTML 格式吗?
【解决方案2】:

'Content is not allowed in prolog' 错误表示在 XML 声明和文档元素的外观之间有一些内容,例如

<?xml version="1.0" encoding="utf-8"?>
content here is not allowed
<kml xmlns="http://earth.google.com/kml/2.1">
...
</kml>

你链接的 XML 文件没问题,所以看起来你是

  • 在将 XML 二进制文件传递给 XML 解析器之前错误地读取它,
  • 或(更有可能)您根本没有读取 XML(当您从 Web URL 读取并收到错误响应时可能会发生这种情况)。 我假设您收到了一个您无法识别的 HTTP 40x 错误,并将响应(通常是 HTML)读取为 XML,这会导致错误。请记住,小程序通常只能从同一服务器读取资源(这就是可能导致错误的原因)。

要验证这一点,请尝试读取 URL 内容并将其输出为文本,然后检查它是否正常。

【讨论】:

  • 我不太确定现在该做什么?我应该删除 XML 文件中的“earth.google.com/kml/2.1"-URL”吗?克里斯
  • 不,XML 命名空间没问题。由于您有一个 Applet(根据您的堆栈跟踪),您如何读取 XML 文件?您可以在您的“PApplet.loadXML”中发布代码吗?
  • 我已经发布了我拥有的所有内容(在代码和堆栈跟踪中)。我的老师告诉我,Processing 将能够按照我已经完成的方式解析 XML 文件。所以我认为我需要一个库或可以帮助我阅读 XML 文件的东西?克里斯
  • 我不知道是不是问题,但是最初的XML文件是我转换为XML的KML。会不会是这个问题?
  • 据我所知,应该可以从 PApplet 内部调用 loadXML("filename.xml") 来读取处理中的 XML 数据。
【解决方案3】:

让它更简单

这样试试

public static void setUp(){
    try {
  File file = new File("parker.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 nodeLst = doc.getElementsByTagName("LinearRing");
  System.out.println("Information");

  for (int s = 0; s < nodeLst.getLength(); s++) {

    Node fstNode = nodeLst.item(s);

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

           Element fstElmnt = (Element) fstNode;
      NodeList fstNmElmntLst = fstElmnt.getElementsByTagName("coordinates");
      Element fstNmElmnt = (Element) fstNmElmntLst.item(0);
      NodeList fstNm = fstNmElmnt.getChildNodes();
      System.out.println("coordinates : "  + ((Node) fstNm.item(0)).getNodeValue());

      //

      //
    }

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

应该显示:

Root element kml
Information
coordinates : 
              10.088512,56.154109,0
              10.088512,56.154109,0
              10.088512,56.154109,0
              10.088511,56.15411,0
              10.088511,56.15411,0
              10.08851,56.15411,0
              10.08851,56.154111,0
              10.088509,56.154111,0
              10.088508,56.154111,0
              10.088508,56.154111,0
              10.088507,56.154111,0
              10.088506,56.154111,0
              10.088506,56.154111,0
              10.088505,56.154111,0
              10.088504,56.154111,0
              10.088504,56.154111,0
              10.088503,56.15411,0
              10.088503,56.15411,0
              10.088502,56.15411,0
              10.088502,56.154109,0
              10.088502,56.154109,0
              10.088501,56.154109,0
              10.088501,56.154108,0
              10.088501,56.154108,0
              10.088501,56.154108,0
              10.088501,56.154107,0
              10.088285,56.154094,0
              10.088104,56.154372,0
              10.088061,56.154401,0
              10.087988,56.15445,0
              10.087915,56.154611,0
              10.08791,56.154613,0
              10.087912,56.154613,0
              10.087877,56.1548,0
              10.08772,56.15482,0
              10.087558,56.154911,0
              10.087421,56.155111,0
              10.087316,56.155308,0
              10.087328,56.15538,0
              10.087372,56.155413,0
              10.087446,56.155453,0
              10.087484,56.155487,0
              10.08747,56.155601,0
              10.08772,56.155616,0
              10.087719,56.155618,0
              10.088618,56.155671,0
              10.089096,56.1557,0
              10.089096,56.155699,0
              10.089138,56.155701,0
              10.089127,56.155706,0
              10.089004,56.155787,0
              10.08888,56.155853,0
              10.088799,56.155806,0
              10.088571,56.155914,0
              10.088455,56.155946,0
              10.088112,56.156081,0
              10.088184,56.156138,0
              10.087733,56.156353,0
              10.087489,56.156421,0
              10.087288,56.156341,0
              10.087268,56.156333,0
              10.086893,56.156182,0
              10.08684,56.156271,0
              10.087049,56.156373,0
              10.086893,56.156455,0
              10.086664,56.156575,0
              10.086443,56.156698,0
              10.086425,56.156708,0
              10.085983,56.156955,0
              10.085655,56.157139,0
              10.085462,56.157276,0
              10.085272,56.157233,0
              10.085176,56.157328,0
              10.084917,56.157393,0
              10.084883,56.157458,0
              10.08495,56.157513,0
              10.084947,56.157524,0
              10.084943,56.157539,0
              10.084855,56.15787,0
              10.084855,56.15787,0
              10.084321,56.157317,0
              10.085553,56.156195,0
              10.085555,56.156194,0
              10.085553,56.156194,0
              10.085734,56.156035,0
              10.085821,56.155977,0
              10.085937,56.155932,0
              10.085993,56.155942,0
              10.086031,56.155959,0
              10.086171,56.15592,0
              10.086227,56.155901,0
              10.086392,56.155841,0
              10.086513,56.155786,0
              10.08664,56.155699,0
              10.086686,56.155657,0
              10.086727,56.155605,0
              10.086777,56.155486,0
              10.086861,56.155289,0
              10.086916,56.155134,0
              10.087006,56.154899,0
              10.087075,56.154706,0
              10.087094,56.154649,0
              10.0871,56.154574,0
              10.087112,56.154464,0
              10.087111,56.154362,0
              10.087112,56.154279,0
              10.087112,56.154279,0
              10.087113,56.15427,0
              10.087114,56.154198,0
              10.087108,56.15413,0
              10.087091,56.154054,0
              10.086992,56.153698,0
              10.087,56.153678,0
              10.087031,56.153647,0
              10.087036,56.153648,0
              10.087046,56.153652,0
              10.087035,56.153647,0
              10.087039,56.153645,0
              10.087072,56.153612,0
              10.087367,56.153308,0
              10.087371,56.153303,0
              10.08742,56.15323,0
              10.087568,56.152963,0
              10.087568,56.152962,0
              10.087569,56.152962,0
              10.08757,56.152961,0
              10.087571,56.15296,0
              10.087573,56.152959,0
              10.087574,56.152959,0
              10.087575,56.152958,0
              10.087577,56.152958,0
              10.087579,56.152958,0
              10.087581,56.152957,0
              10.087582,56.152957,0
              10.087584,56.152957,0
              10.087586,56.152958,0
              10.087588,56.152958,0
              10.087589,56.152958,0
              10.087591,56.152959,0
              10.087592,56.152959,0
              10.087593,56.15296,0
              10.087594,56.152961,0
              10.087595,56.152962,0
              10.087596,56.152963,0
              10.087596,56.152964,0
              10.087596,56.152965,0
              10.087596,56.152965,0
              10.087614,56.152967,0
              10.087921,56.152988,0
              10.088134,56.153019,0
              10.088311,56.15304,0
              10.088454,56.153052,0
              10.088469,56.153378,0
              10.08847,56.153445,0
              10.088473,56.153597,0
              10.088473,56.153597,0
              10.088473,56.153597,0
              10.088703,56.153614,0
              10.088703,56.153614,0
              10.088703,56.153614,0
              10.088704,56.153614,0
              10.088705,56.153614,0
              10.088705,56.153615,0
              10.088706,56.153615,0
              10.088706,56.153615,0
              10.088707,56.153616,0
              10.088707,56.153616,0
              10.088707,56.153616,0
              10.088707,56.153617,0
              10.088707,56.153617,0
              10.088707,56.153617,0
              10.088707,56.153618,0
              10.088512,56.154108,0
              10.088512,56.154109,0

coordinates : 
              10.086779,56.155487,0
              10.086778,56.155488,0
              10.086779,56.155487,0
              10.086779,56.155487,0

coordinates : 
              10.08847,56.153602,0
              10.088469,56.153602,0
              10.088469,56.153602,0
              10.08847,56.153602,0

PS : kml 是根元素

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多