从java

时间:2015-10-29 10:56:04

标签: java xml tags

我有以下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在它工作的位置标签中。 解决方案是什么?

3 个答案:

答案 0 :(得分:1)

在我的电脑上正常工作。

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>节点,则代码将无效。

答案 1 :(得分:0)

我改变String [] temp; // = s.split(&#34; [ - ]&#34;);

to String [] temp = s.split(&#34; [ - ]&#34;);

和我一起工作

答案 2 :(得分:0)

我的XML文件中有很多形状,每个形状都有属性标记,这就是为什么它会给我错误