要访问值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>
答案 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目前是我最喜欢的,但那里有很多。