【发布时间】:2015-10-29 10:56:04
【问题描述】:
我有以下 xml:
<Triangle>
<Color>
<Red>r-0</Red>
<Green>g-0</Green>
<Blue>b-255</Blue>
</Color>
<FillColor>
<Red>r-0</Red>
<Green>g-0</Green>
<Blue>b-255</Blue>
</FillColor>
<Position>
<X>x-12</X>
<Y>y-12</Y>
</Position>
<properties>
<Y1>v-13.0</Y1>
<X1>v-12.0</X1>
<Y2>v-15.0</Y2>
<X2>v-14.0</X2>
</properties>
</Triangle>
我想从节点获取值,例如: 节点 Y1 具有元素 v-13.0
我用了这个方法:
Map<String, Double> m = new HashMap<String, Double>();
File xmlFile = new File("Data.xml");
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
Document xmlDoc = docBuilder.parse(xmlFile);
NodeList list = xmlDoc.getElementsByTagName("properties");
Node node1 = list.item(0);
Element element1 = (Element) node1;
//Y1
String s = element1.getElementsByTagName("Y1").item(0).getTextContent();
String[] temp = s.split("[-]");
m.put("Y1", Double.parseDouble(temp[1]));
//X1
s =element1.getElementsByTagName("X1").item(0).getTextContent();
temp = s.split("[-]");
m.put("X1", Double.parseDouble(temp[1]));
//Y2
s =element1.getElementsByTagName("Y2").item(0).getTextContent();
temp = s.split("[-]");
m.put("Y2", Double.parseDouble(temp[1]));
//X2
s =element1.getElementsByTagName("X2").item(0).getTextContent();
temp = s.split("[-]");
m.put("X2", Double.parseDouble(temp[1]));
当我使用此方法在属性标记中获取 X1、Y1、X2、Y2 的元素时,它在 String s = element1.getElementsByTagName("Y1").item(0).getTextContent() 行中给出了空指针异常,但是当我使用相同的方法获取 X、Y 中的元素时它工作的位置标签。
解决办法是什么?
【问题讨论】:
-
对我来说很好。您是否仔细检查过输入 XML 中是否存在
Y1? -
完全按照上面的方法复制并运行它,没有例外,输出'm' = "{X1=12.0, X2=14.0, Y1=13.0, Y2=15.0}" 我只能假设你指向一个狡猾的 xml 文件。
-
@TomMac 是的,我检查过
-
@RossDrew 你认为是什么问题?
-
我唯一能看到的问题是 xml 文件是否错误。正如我所说,以上内容对我和其他人都很好。