如何在java中获取xml文件的子部分

时间:2017-06-14 06:19:31

标签: java xml xmlstreamreader

我有以下xml文件。

<?xml version="1.0" encoding="UTF-8"?>
<school>
    <student>
        <firstname name="ankush">
            <test>sample </test>  //......here can be more sub nodes

        </firstname>
        <lastname>thakur</lastname>
        <email>beingjavaguy.gmail.com</email>
        <phone>7678767656</phone>
        <address>
          <houseNo> </houseNo>
          <street> </street>
          <city> </city>
          <pincode> </pincode>
        </address>
    </student>
</school>

从上面的xml文件我希望得到节点如下面的字符串

<address>
      <houseNo> </houseNo>
      <street> </street>
      <city> </city>
      <pincode> </pincode>
    </address>

上述地址xml节点将转换为json以在我的应用程序中使用。

我尝试过DOM,SAX解析器但它们只用于按节点获取每个节点而不是xml文件的一部分。

由于我的xml文件有些大,我更喜欢使用XMLStreamReader。

有没有人告诉我,如何将xml文件的一部分作为字符串?

2 个答案:

答案 0 :(得分:0)

尝试使用jsoup。示例:

import java.io.File;
import java.io.IOException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
// add
import org.jsoup.select.Elements;


public class JsoupTest {

    public static void main(String [] args) throws IOException{                  
        File input = new File("C:\\Users\\eritrean\\Desktop\\test.xml");
        Document doc = Jsoup.parse(input,"UTF-8");
        //select all address tags; returns a list of Elements
        Elements addresses = doc.getElementsByTag("address");
        for(Element address : addresses){
            System.out.println(address);
            System.out.println("------------");
        }
    }
}

答案 1 :(得分:0)

有很多工具可以用简单的方式解析xml; JaxB,dom4j,jsoup ......仅举几例。他们都有优点和缺点。

在选择使用哪种技术时要考虑的重要事项是您现在实际需要什么以及您可能需要多大的灵活性。

所以对于你的食物,你需要访问每个学生的地址(我假设你的xml文件可能包含多个学生)。

您只需要地址还是需要更多? 您需要对地址做什么,是否需要在特定结构中进行处理? 你在应用程序中有任何现有的xml处理吗? (我不想介绍两个做同样事情的技术人员)

如果你只想找到数据作为字符串,那么Jsoup或Dom4j是完美的(就像厄立特里亚写的例子),但是如果你需要你的数据更多的是OO结构,那么JaxB可能是有益的。

JaxB基本上将xml转换为指定的POJO结构(使用javax.xml.bind.annotation anotations进行了分配),因此您的数据会自动封装好。

你可以使用:

javax.xml.parsers.DocumentBuilder builder = javax.xml.parsers.DocumentBuilderFactory.newInstance().newDocumentBuilder();
org.w3c.dom.Document xmlDocument = builder.parse(new InputSource(new StringReader(documentXml)));
org.w3c.dom.Node rootNode = xmlDocument.getFirstChild();
// then get by tag name