0

我有以下 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 文件的一部分作为字符串获取?

4

2 回答 2

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("------------");
        }
    }
}
于 2017-06-14T07:36:16.360 回答
0

有很多工具可以简单地解析 xml;JaxB、dom4j、jsoup……仅举几例。他们都有长处和短处。

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

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

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

如果您只是想以字符串形式查找数据,那么 Jsoup 或 Dom4j 是完美的(如 Eritrean 编写的示例),但是如果您要求数据更多地采用 OO 结构,那么 JaxB 可能是有益的。

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

你可以使用:

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
于 2017-06-14T08:47:41.323 回答