使用 jdom 获取两个标签 XML 之间的内容
getting content between two tags XML using jdom
我正在尝试获取标签 <catalog> </catalog>
之间的内容,因为这是 xml 文件 :
<test1>
</test1>
<catalog>
<book id="bk101">
<author>Gambardella, Matthew</author>
<title>XML Developer's Guide</title>
<genre>Computer</genre>
<price>44.95</price>
</book>
<book id="bk102">
<author>Ralls, Kim</author>
<title>Midnight Rain</title>
<genre>Fantasy</genre>
<price>5.95</price>
</book>
</catalog>
结果只有这个:
<book id="bk101">
<author>Gambardella, Matthew</author>
<title>XML Developer's Guide</title>
<genre>Computer</genre>
<price>44.95</price>
</book>
<book id="bk102">
<author>Ralls, Kim</author>
<title>Midnight Rain</title>
<genre>Fantasy</genre>
<price>5.95</price>
</book>
我开始学习 jdom,但我可以达到这个结果我只知道基本操作,任何人都可以知道如何做,在此先感谢。
我试试这个:
public static void read() throws JDOMException, IOException{
SAXBuilder reader = new SAXBuilder();
Document doc = reader.build(new File("C:\Users\HC\Desktop\dataset\book.xml"));
racine = doc.getRootElement();
String root = racine.getName();
Element catalog = racine.getChild("catalog");
List nodes = catalog.getChildren();
Iterator i = nodes.iterator();
while(i.hasNext()){
Element courant = (Element) i.next();
// i want here keeping all tags inside the tag catalog
System.out.print(courant.getContent());
}
}
我只得到这样的结果:
[[Text:
], [Element: <author/>], [Text:
], [Element: <title/>], [Text:
], [Element: <genre/>], [Text:
], [Element: <price/>], [Text:
]][[Text:
], [Element: <author/>], [Text:
], [Element: <title/>], [Text:
], [Element: <genre/>], [Text:
], [Element: <price/>], [Text:
试试
List list = catalog.getChildren("book");
for (int i = 0; i < list.size(); i++) {
Element node = (Element) list.get(i);
System.out.println("Author : " +node.getChildText("author"));
System.out.println("Title : " + node.getChildText("title"));
// ... etc
}
下面是如何使用 vtd-xml
的代码
import com.ximpleware.*;
public class getContent {
public static void main(String s[]) throws VTDException{
VTDGen vg = new VTDGen();
if (!vg.parseFile("C:\Users\HC\Desktop\dataset\book.xml", false))
return;
VTDNav vn = vg.getNav();
if (vn.toElement(VTDNav.FIRST_CHILD, "book")){
long l = vn.getContentFragment();
System.out.println( "book content ==> ");
System.out.println(vn.toString((int)l, (int)(l<<32)));
}
}
}
我正在尝试获取标签 <catalog> </catalog>
之间的内容,因为这是 xml 文件 :
<test1>
</test1>
<catalog>
<book id="bk101">
<author>Gambardella, Matthew</author>
<title>XML Developer's Guide</title>
<genre>Computer</genre>
<price>44.95</price>
</book>
<book id="bk102">
<author>Ralls, Kim</author>
<title>Midnight Rain</title>
<genre>Fantasy</genre>
<price>5.95</price>
</book>
</catalog>
结果只有这个:
<book id="bk101">
<author>Gambardella, Matthew</author>
<title>XML Developer's Guide</title>
<genre>Computer</genre>
<price>44.95</price>
</book>
<book id="bk102">
<author>Ralls, Kim</author>
<title>Midnight Rain</title>
<genre>Fantasy</genre>
<price>5.95</price>
</book>
我开始学习 jdom,但我可以达到这个结果我只知道基本操作,任何人都可以知道如何做,在此先感谢。 我试试这个:
public static void read() throws JDOMException, IOException{
SAXBuilder reader = new SAXBuilder();
Document doc = reader.build(new File("C:\Users\HC\Desktop\dataset\book.xml"));
racine = doc.getRootElement();
String root = racine.getName();
Element catalog = racine.getChild("catalog");
List nodes = catalog.getChildren();
Iterator i = nodes.iterator();
while(i.hasNext()){
Element courant = (Element) i.next();
// i want here keeping all tags inside the tag catalog
System.out.print(courant.getContent());
}
}
我只得到这样的结果:
[[Text:
], [Element: <author/>], [Text:
], [Element: <title/>], [Text:
], [Element: <genre/>], [Text:
], [Element: <price/>], [Text:
]][[Text:
], [Element: <author/>], [Text:
], [Element: <title/>], [Text:
], [Element: <genre/>], [Text:
], [Element: <price/>], [Text:
试试
List list = catalog.getChildren("book");
for (int i = 0; i < list.size(); i++) {
Element node = (Element) list.get(i);
System.out.println("Author : " +node.getChildText("author"));
System.out.println("Title : " + node.getChildText("title"));
// ... etc
}
下面是如何使用 vtd-xml
的代码 import com.ximpleware.*;
public class getContent {
public static void main(String s[]) throws VTDException{
VTDGen vg = new VTDGen();
if (!vg.parseFile("C:\Users\HC\Desktop\dataset\book.xml", false))
return;
VTDNav vn = vg.getNav();
if (vn.toElement(VTDNav.FIRST_CHILD, "book")){
long l = vn.getContentFragment();
System.out.println( "book content ==> ");
System.out.println(vn.toString((int)l, (int)(l<<32)));
}
}
}