Как получить вложенную часть XML-файла в Java

У меня есть следующий 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 ответа

Попробуйте это с помощью 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("------------");
        }
    }
}

Существует множество инструментов для простого анализа xml; JaxB, dom4j, jsoup... и это только некоторые из них. Все они имеют свои сильные и слабые стороны.

При выборе используемой технологии важно учитывать то, что вам на самом деле нужно сейчас, и какая гибкость вам, вероятно, понадобится.

Таким образом, для еды вам необходимо получить доступ к адресу каждого учащегося (я предполагаю, что ваш xml-файл может содержать несколько учеников).

Вам нужен только адрес или вам нужно больше? Что вам нужно сделать с адресом, нужно ли это в определенной структуре для обработки? Есть ли у вас какая-либо обработка XML в приложении? (Мне не нравится представлять двух техников, которые делают то же самое)

Если вы просто хотите найти данные в виде строк, то Jsoup или Dom4j идеальны (как пример, написанный Eritrean). Однако, если вы хотите, чтобы ваши данные были в большей степени в ОО-структуре, тогда 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
Другие вопросы по тегам