我一直在寻找JAVA中的XML读取示例,我总是找到一个典型的架构根 - > 3个相等的儿子 - > 3个相等的孙子。
但有时你只需得到一对没有存储的元素,就像一个带有书籍{title,author,pages of pages}的图书馆。我的XML看起来像:
<?xml version="1.0" encoding="UTF-8" ?>
<A>
<Crap1>
<CrapSon>1</CrapSon>
</Crap1>
<B>
<Crap2>Store</Crap2>
<C>
<Type>N</Type>
<D>
<InterestingData1>Data</InterestingData1>
</D>
<InterestingData2>More Data</InterestingData2>
</C>
</B>
</A>
当然,我可以迭代它,最后得到我想要的数据元素。但是有没有快速的方法来访问你想要的那些元素而不需要迭代树,只需按名称并让它搜索它?
答案 0 :(得分:1)
您可以在Java SE 5及更高版本中使用javax.xml.xpath
库,并使用XPath在文档中查询所需的数据。
示例强>
答案 1 :(得分:1)
您可以尝试以下内容:
import java.io.IOException;
import java.io.StringReader;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
class Test {
public static void main(String args[]) throws ParserConfigurationException, SAXException, IOException{
String xmlString ="<A>" +
"<Crap1><CrapSon>1</CrapSon>" +
"</Crap1>" +
"<B>" +
"<Crap2>Store</Crap2><C><Type>N</Type><D><InterestingData1>Data</InterestingData1></D><InterestingData2>More Data</InterestingData2></C>" +
"</B>" +
"</A>";
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = dbf.newDocumentBuilder();
Document doc = docBuilder.parse(new InputSource(new StringReader(xmlString)));
NodeList nodelist = doc.getElementsByTagName("InterestingData2");
NodeList nodelist2 = doc.getElementsByTagName("Type");
String str = nodelist.item(0).getTextContent();
String str2 = nodelist2.item(0).getTextContent();
System.out.println("InterestingData2: "+str);
System.out.println("Type: " + str2);
}
}
输出:
有趣的数据2:更多数据
类型:N
答案 2 :(得分:0)
如果你不想要DOM,我想你应该使用带有处理程序的SAX解析器来处理InterestingData1
和InterestingData2
。