Как получить вложенную часть 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