java如何获取XML中子节点的内容

比如获取
<unknown about="this">
<definition>"hello"</definition>
</unknown>
<noname about="that">
<definition>"what"</definition>
</noname>
<example about="there">
<definition>"is"</definition>
</example>
<left about="the">
<definition>"the"</definition>
</left>
<right about="those">
<bre>
<definition>"red"</definition>
</bre>
</right>
想得到hello, what ,is, the, red也就是definition的内容,但是definition的层次(深度)未知
求代码

  java中获取xml节点元素值 根据不同的处理xml方式不同而不同。
java中解析xml的方式:大体可以使用以下四种
------------------------------------------------------------
DOM(Document Object Model)
为 XML 文档的已解析版本定义了一组接口。解析器读入整个文档,
然后构建一个驻留内存的树结构,然后代码就可以使用 DOM 接口来操作这个树结构。
优点:整个文档树在内存中,便于操作;支持删除、修改、重新排列等多种功能;
缺点:将整个文档调入内存(包括无用的节点),浪费时间和空间;
使用场合:一旦解析了文档还需多次访问这些数据;硬件资源充足(内存、CPU)

SAX(Simple API for XML)
为解决DOM的问题,出现了SAX。SAX ,事件驱动。
当解析器发现元素开始、元素结束、文本、文档的开始或结束等时,发送事件,
程序员编写响应这些事件的代码,保存数据。优点:不用事先调入整个文档,占用资源少;
SAX解析器代码比DOM解析器代码小,适于Applet,下载。
缺点:不是持久的;事件过后,若没保存数据,那么数据就丢了;无状态性;
从事件中只能得到文本,但不知该文本属于哪个元素;
使用场合:Applet;只需XML文档的少量内容,很少回头访问;机器内存少;

DOM4J
DOM4J 是一个非常非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,
同时它也是一个开放源代码的软件。如今你可以看到越来越多的 Java 软件都在使用 DOM4J 来读写 XML,
特别值得一提的是连 Sun 的 JAXM 也在用 DOM4J

JDOM
为减少DOM、SAX的编码量,出现了JDOM;优点:20-80原则,极大减少了代码量。
使用场合:要实现的功能简单,如解析、创建等,但在底层,JDOM还是使用SAX(最常用)、DOM、Xanan文档。
------------------------------
参考代码
dom4j
------------------------------
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
---------------------------------------------
File f = new File("students.xml");
SAXReader reader = new SAXReader();
Document doc = reader.read(f);
Element root = doc.getRootElement();

for (Iterator iter = root.elementIterator(); iter.hasNext();) {
Element element = (Element) iter.next();
// System.out.println(element.attributeValue("email"));

String ids=element.elementText("stuId");
System.out.println(ids);
String names=element.elementText("stuName");
System.out.println(names);
String ages=element.elementText("age");
System.out.println(ages);
}
------------------------------------
dom 方式
---------------
import javax.xml.parsers.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
------------------------

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
// 允许名字空间
// factory.setNamespaceAware(true);
// 允许验证
// factory.setValidating(true);
// 获得DocumentBuilder的一个实例

DocumentBuilder builder = null;
try {
builder = factory.newDocumentBuilder();
} catch (ParserConfigurationException pce) {
System.err.println(pce);
// 出异常时输出异常信息,然后退出,下同
System.exit(1);
}

Document doc = null;
// 解析文档,并获得一个Document实例。

try {
try {
// InputStream is=new FileInputStream("students.xml");
doc = builder.parse("students.xml");
// doc = builder.parse(is);

} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (DOMException dom) {
System.err.println(dom.getMessage());
System.exit(1);
} catch (IOException ioe) {
System.err.println(ioe);
// System.exit(1);
}
for (int i = 0; i < nlStudent.getLength(); i++) {

Element elmtStudent = (Element) nlStudent.item(i);
String email = elmtStudent.getAttribute("email");
System.out.println(email);

NodeList ids = elmtStudent.getElementsByTagName("stuId");
Element id = (Element)ids.item(0);
Node tId = id.getFirstChild();
System.out.println(tId.getNodeValue());

NodeList names = elmtStudent.getElementsByTagName("stuName");
Element e = (Element)names.item(0);
Node tName = e.getFirstChild();
System.out.println(tName.getNodeValue());
}
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-09-23
刚好我上午在做这个,dom4j解析

Reader reader = new InputStreamReader(con
.getInputStream());
SAXReader sax = new SAXReader();
// sax.setEncoding("GBK");

Document document = sax.read(reader);
document.setXMLEncoding("GBK");
Element root = document.getRootElement();
// Document doc = reader.read(read);
// Element root = doc.getRootElement();
readNode(root, "");

public static void readNode(Element root, String prefix) {
if (root == null) return;
// 获取属性
List<Attribute> attrs = root.attributes();
if (attrs != null && attrs.size() > 0) {
System.err.print(prefix);
for (Attribute attr : attrs) {
System.err.print(attr.getValue() + " ");
}
System.err.println();
}
// 获取他的子节点
List<Element> childNodes = root.elements();
prefix += "\t";
for (Element e : childNodes) {
//输出内容
System.err.println(e.getName()+":"+e.getData());
readNode(e, prefix);
}
}本回答被提问者和网友采纳
第2个回答  2013-03-27
去学 dom4j
第3个回答  2013-03-27
用dom4j 手动解析不好解决

java如何从一个xml文件读取根节点、子节点属性。
1> 有xml文件路径,获取该路径下的所有文件,用后缀“.xml”或“.XML”过滤得到xml文件。2> javax.xml.parsers.DocumentBuilder builder = factory.newDocumentBuilder();org.w3c.dom.Document doc = builder.parse(is); 创建文档对象。3>doc.getChildNodes()获取文档中所有的节点,循环遍历所得节点node...

java 解析 xml字符串 取子节点数值
大致的代码是:Document doc = DocumentHelper.parseText(sss);Element root = doc.getRoot();\/\/或许是doc.rootElement();,这里获取到的是process节点 Iterator<?> iter = root.elementIterator("task");\/\/这里是task节点的迭代器,因为有多个task,所以使用迭代器,如果是一个节点的话,就使用root....

java 如何循环读取xml下相同子节点
\/\/ 获取他的子节点 List childNodes = root.elements();prefix += "\\t";for (Element e : childNodes) { \/\/输出内容 System.err.println(e.getName()+":"+e.getData());readNode(e, prefix);} }

java 截取 xml(字符串)的子节点
你好,直接indexOf <task> 跟 <\/task> 然后subString一下都没问题.或者正则表达式 <task>(.*?)<\/task> 如果是一个长期的工程,量比较大的,考虑用dom4j来做吧.http:\/\/xhy0422.iteye.com\/blog\/50235 对于已经是字符串的xml,可以

java怎么通过xml节点的属性获取这个节点的ŀ
(一)首先,输入一套程序代码,具体的程序提供如下,配图:(二)如果以上程序代码不能解决问题,请及时联系相关专业人士解决。在一般情况下,java是通过xml节点的属性设置一连串系列的程序代码获取节点的值。

java中dom4j解析xml文件怎么获取节点属性
dom4j中,使用Element.attributes方法可以获取到节点的属性,而使用elements则可以获取相应的子节点 比如:Element root = doc.getRootElement();List attrList = root.attributes();for (int i = 0; i < attrList.size(); i++) { \/\/属性的取得 Attribute item = (Attribute)attrList.get(i);...

JAVA解析xml得到节点的值
import java.io.File;import java.util.Iterator;import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.Element;import org.dom4j.io.SAXReader;public class ParseXml {public static void main(String[] args) throws DocumentException {SAXReader reader = new SAXReader();Docum...

java 关于读取xml文件的问题
1.获取文档的根节点。Element rootElm = document.getRootElement();2.取得某节点的单个子节点。Element memberElm=root.element("member");\/\/ "member"是节点名 3.取得节点的文字 String text=memberElm.getText();也可以用:String text=root.elementText("name");这个是取得根节点下的name字节点...

java 怎么读取xml里面的值
dom4j是最常用的java解析xml技术,在使用时需要下载dom4j.jar 具体解析方法可以参考一下内容 xml结构 <books> <book id="001"> Harry Potter <author>J K. Rowling<\/author> <\/book> <book id="002"> Learning XML <author>Erik T. Ray<\/author> <\/book> <\/books> ...

如何用java程序从xml文件中根据文本内容获取指定标签并删除标签和内容...
思考1:不同应用程序之间的通信?思考2:不同平台间的通信?思考3:不同平台间的数据共享?答案就是我们要学习的XML文件。我们可以使用相同的xml把不同的文件联系起来 回到顶部 二、应用 DOM 方式解析 XML ❤ 在Java程序中如何获取XML文件的内容 解析的目的:获取节点名、节点值、属性名、属性...

相似回答