0

我必须在java中逐行读取一个Xml文件。

该文件具有以下格式的行:

    <CallInt xsi:type="xsd:int">124</CallInt>

我只需要从上面的行中提取标签名称 CallInt 和值 124。我尝试使用 String Tokenizer、Split 等。但没有任何帮助。

谁能帮我这个?

一些代码

    BufferedReader buf = new BufferedReader(new FileReader(myxmlfile));

    while((line = buf.readLine())!=null)
    {
    String s = line;
    // Scanning for the tag and the integer value code???
    }
4

2 回答 2

0

这是StaX的一个小例子。

请注意,为简单起见,我删除了对架构的引用(否则它将失败)。

名为“test”的 XML 文件,位于路径“/your/path”中

<thingies>
    <thingie foo="blah"/>
    <CallInt>124</CallInt>
</thingies>

代码

XMLInputFactory factory = null;
XMLStreamReader reader = null;
// code is Java 6 style, no try with resources
try {
    factory = XMLInputFactory.newInstance();
    // coalesces all characters in one event
    factory.setProperty(XMLInputFactory.IS_COALESCING, true);
    reader = factory.createXMLStreamReader(new FileInputStream(new File(
            "/your/path/test.xml")));
    boolean readCharacters = false;
    while (reader.hasNext()) {
        int event = reader.next();
        switch (event) {
        case (XMLStreamConstants.START_ELEMENT): {
            if (reader.getLocalName().equals("CallInt")) {
                readCharacters = true;
            }
            break;
        }
        case (XMLStreamConstants.CHARACTERS): {
            if (readCharacters) {
                System.out.println(reader.getText());
                readCharacters = false;
            }
            break;
        }
        }
    }
}
catch (Throwable t) {
    t.printStackTrace();
}
finally {
    try {
        reader.close();
    }
    catch (Throwable t) {
        t.printStackTrace();
    }
}

输出

124

是关于模式和 StaX 的一个有趣的 SO 线程。

于 2013-11-08T21:51:08.730 回答
0

你真的应该使用一个小的 xml 解析器。

如果您必须逐行阅读,并且格式保证是基于行的,请使用 indexOf() 在要提取的内容周围搜索分隔符,然后使用 substring()...

int cut0 = line.indexOf('<');
if (cut0 != -1) {
  int cut1 = line.indexOf(' ', cut0);
  if (cut1 != -1) {
    String tagName = line.substring(cut0 + 1, cut1);

    int cut2 = line.indexOf('>', cut1);  // insert more ifs as needed...
    int cut3 = line.indexOf('<', cut2);

    String value = line.substring(cut2 + 1, cut2);
  }
}
于 2013-11-08T21:37:55.077 回答