从 java 中的 xml 文件读取错误
Error reading from xml file in java
我有以下 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 在它起作用的位置标签中。
解决方案是什么?
在我的电脑上运行良好。
map : {Y1=13.0, X1=12.0, Y2=15.0, X2=14.0}
是否有可能您正在使用错误的 xml 文件进行测试?
提示:尝试指定 "data.xml" 文件的完整绝对系统路径。您可能会发现 java 使用了不同的文件。
PS:不太相关,但最好用Double.valueOf(String)
来转换字符串。 parseDouble
方法产生一个原语 double
,它需要 java 来执行自动装箱。另一方面,valueOf
会立即创建一个包装器 Double
对象(不需要自动装箱)。
要检查的另一件事:xml 标签区分大小写。根据您的 java 代码,您的 <properties>
标签必须为小写。如果您的 xml 文件包含一个 <Properties>
节点,您的代码将不起作用。
我更改 String[] temp ;//= s.split("[-]");
到字符串[] temp = s.split("[-]");
和我一起工作
我的 XML 文件中有很多形状,每个形状都有属性标签,这就是它给我错误的原因
我有以下 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 在它起作用的位置标签中。
解决方案是什么?
在我的电脑上运行良好。
map : {Y1=13.0, X1=12.0, Y2=15.0, X2=14.0}
是否有可能您正在使用错误的 xml 文件进行测试? 提示:尝试指定 "data.xml" 文件的完整绝对系统路径。您可能会发现 java 使用了不同的文件。
PS:不太相关,但最好用Double.valueOf(String)
来转换字符串。 parseDouble
方法产生一个原语 double
,它需要 java 来执行自动装箱。另一方面,valueOf
会立即创建一个包装器 Double
对象(不需要自动装箱)。
要检查的另一件事:xml 标签区分大小写。根据您的 java 代码,您的 <properties>
标签必须为小写。如果您的 xml 文件包含一个 <Properties>
节点,您的代码将不起作用。
我更改 String[] temp ;//= s.split("[-]");
到字符串[] temp = s.split("[-]");
和我一起工作
我的 XML 文件中有很多形状,每个形状都有属性标签,这就是它给我错误的原因