2011-03-08 62 views
0

我想读,看起来像这样一个XML线:阅读单一XML行与Java

<position lat="59.3252414125" long="18.0750236375" accuracy="1000"></position> 

这里的目标是采取的“纬度”,“长”和“准确性”的价值观并将它们放入三个Java变量中。

编辑:我想我应该提到该行是从XML中读取的,因此它不会很容易编辑,因为它会出现。

+0

您正在使用哪种xml框架? – kostja 2011-03-08 10:37:26

+0

那么,有什么麻烦? – 2011-03-08 10:37:26

+0

你基本上有2个选择与默认jdk:萨克斯/斯塔克斯和dom – kostja 2011-03-08 10:38:02

回答

2

尝试:

String s = "<position lat=\"59.3252414125\" long=\"18.0750236375\" accuracy=\"1000\"></position>"; 
    InputSource is = new InputSource(new StringReader(s)); 
    DOMParser dp = new DOMParser(); 
    dp.parse(is); 
    Document doc = dp.getDocument(); 
    NodeList nl = doc.getElementsByTagName("position"); 
    Node n = nl.item(0); 
    NamedNodeMap nnm = n.getAttributes(); 
    String lat = nnm.getNamedItem("lat").getFirstChild().getTextContent(); 
    String longg = nnm.getNamedItem("long").getFirstChild().getTextContent(); 
    String accuracy = nnm.getNamedItem("accuracy").getFirstChild().getTextContent(); 

推荐读物:

+0

如果从XML文件中读取有问题的XML行,这会如何处理?因为我隔离了最后3行导致NullPointerException。 – Zephyr 2011-03-09 10:40:15

+0

@Zephyr如果你正在阅读文件使用:'dp.parse(“complete \\ file \\ path \\ fully \\ escaped”);' – Nishant 2011-03-09 10:52:46

+0

它现在正在工作!我交换了.getFirstChild()。getTextContent();与getNodeValue()); – Zephyr 2011-03-09 12:31:59

0

只使用String.split()函数:

package com.stackoverflow.q5231285; 

public class Test { 
    public static void main(String[] args) { 
     String xmlLine = "<position lat=\"59.3252414125\" long=\"18.0750236375\" accuracy=\"1000\"></position>"; 
     String splitResult[] = xmlLine.split("\""); 

     Double latValue = Double.parseDouble(splitResult[1]); 
     Double longValue = Double.parseDouble(splitResult[3]); 
     int accuracy = Integer.parseInt(splitResult[5]); 
     System.out.println(latValue + " " + longValue + " " + accuracy); 
    } 
} 
+2

不是解析组织的XML数据的正确方法。当数据非常干净时,它是残酷的。可以解决眼前的问题,但不好的做法。尽管如此,还没有投票。 – Nishant 2011-03-08 11:11:31

+0

当然,这不是解析XML的好习惯,但问题是要求用给定的格式解析字符串。当然,如果属性顺序发生变化,我的代码将无法正常工作,但在没有要求灵活性的情况下,我看不出有任何问题可能会失去灵活性。有时我们(程序员)在没有必要的时候添加非明确的需求。 – eolith 2011-03-08 11:40:58

0

如果你使用的SAX或StAX的,你可能会用XMLEventReaderXMLStreamReader结束。两者都有确定当前正在处理的XML ElementEvent的类型的方法,在XMLStreamConstants中定义。
如果您有position元素,只要使用EventReader即可获得nextEvent()的下一个事件,或者在使用StreamReader时获取getAttributeValue()的属性值