如何访问XML中的值

时间:2012-03-28 19:45:32

标签: java xml

要访问值id1& id2迭代遍历XML中的每个值,如果我找到一个名为id1或id2的标签,我将其值读入变量。是否有更好的方法来读取值id1& id2?

<begin>
  <total>1</total>
  <values>
    <factor>
      <base>test</base>
      <id1>id1</id1>
      <id2>id2</id2>
      <val>val2</val>
      <newval>val1</newval>
    </factor>
  </values>
</begin>

5 个答案:

答案 0 :(得分:1)

如果使用XPath,则可以直接从Document对象中提取值。在您的情况下,转到id1的XPath将为/begin/id1

答案 1 :(得分:1)

您可以使用Java API for XML Processing。这是一种在Java中处理XML的非常强大的方法。

答案 2 :(得分:1)

使用SAX解析器并将“id1”start元素后面发出的文本作为id1值存储,将“id2”start元素后面的文本存储为id2值。

例如:

public static List<String> getIds(InputStream xmlStream) throws ParserConfigurationException, SAXException, IOException {
  final List<String> ids = new ArrayList<String>();
  SAXParserFactory factory = SAXParserFactory.newInstance();
  SAXParser saxParser = factory.newSAXParser();
  saxParser.parse(xmlStream, new DefaultHandler() {
    boolean getChars = false;
    public void startElement(String uri, String name, String qName, Attributes attrs) throws SAXException {
      if ("id1".equalsIgnoreCase(qName)) getChars = true;
      if ("id2".equalsIgnoreCase(qName)) getChars = true;
    }
    public void characters(char cs[], int start, int len) throws SAXException {
      if (getChars) {
        ids.add(new String(cs, start, len));
        getChars = false;
      }
    }
  });
  return ids;
}

答案 3 :(得分:1)

您可以使用JDOM执行此操作:

import org.jdom.Document;
import org.jdom.input.SAXBuilder;

public class Test {

    public static void main(String[] args) throws Exception{
        SAXBuilder builder = new SAXBuilder();
        Document doc = builder.build("test.xml");
        String id1 = doc.getRootElement().getChild("values").getChild("factor").getChild("id1").getValue();
        System.out.println(id1);
        String id2 = doc.getRootElement().getChild("values").getChild("factor").getChild("id2").getValue();
        System.out.println(id2);
    }

}

答案 4 :(得分:0)

我会使用任何支持XPath的库。 JDOM目前是我最喜欢的,但那里有很多。