【问题标题】:Error reading from xml file in java从java中读取xml文件时出错
【发布时间】: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 文件是否错误。正如我所说,以上内容对我和其他人都很好。

标签: java xml tags


【解决方案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 代码,您的 &lt;properties&gt; 标记必须为小写。如果您的 xml 文件包含 &lt;Properties&gt; 节点,则您的代码将不起作用。

【讨论】:

  • @Mark Mamdouh 并且您正在使用完全相同的文件进行测试?还是内容不同? (xml 区分大小写,所以也可以)&lt;properties&gt; 标签必须是小写的。
  • 我遇到了问题,我有所有形状的 标签,这就是它给我错误的原因,谢谢@bvdb
【解决方案2】:

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

to String[] temp = s.split("[-]");

和我一起好好工作

【讨论】:

  • 确实,这也是我为了让它运行而改变的东西。所以,在我看来,java代码没有错。
  • @Nemaky 我的代码中有你的代码,这是帖子中的错误,我编辑了它
  • 能不能把异常写在这里看看列表长度
  • 我遇到了问题,我有所有形状的 标签,这就是它给我错误的原因,谢谢@Nemaky
【解决方案3】:

我的 XML 文件中有很多形状,每个形状都有属性标签,这就是它给我错误的原因

【讨论】:

    猜你喜欢
    • 2012-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-28
    相关资源
    最近更新 更多