getTextContent 实际获取的是所有子节点的值;
getNodeValue是获取当前节点的值;
element在setTextContent的时候其实是给节点
#text
设置值;所以element 获取value时调用getFirstChild的value实际
调用的是第一个
#text
,而element 直接调用getNodeValue为空值
getTextContent 实际获取的是所有子节点的值;getNodeValue是获取当前节点的值;element在setTextContent的时候其实是给节点 #text 设置值;所以element 获取value时调用getFirstChild的value实际调用的是第一个#text ,而element 直接调用getNodeValue为空值 ...
在学习DOM解析XML的内容时,最先学习了读取XML中的内容,但是利用get
Node
Value
()方法时,常常获得null;要不然就是报NullPointerException空指针错误。于是我就查阅了相关的内容,将这个知识点总结一下。首先贴出我的XML中的内容:
<?xml version="1.0" encoding="UTF-8"?>
<Languages cat="it"...
1 //创建一个DocumentBuilderFactory工厂实例
2 DocumentBuilderFactory DBF=DocumentBuilderFactory.newInstance();
3 //通过工厂实例对象创建一个DocumentBuilder实例
4 DocumentBuilder DB=DBF.newDoc...
XML解析——Java中XML的四种解析方式
XML是一种通用的数据交换格式,它的平台无关性、语言无关性、系统无关性、给数据集成与交互带来了极大的方便。XML在不同的语言环境中解析方式都是一样的,只不过实现的语法不同而已。
XML的解析方式分为四种:
一.DOM解析
1、JAXP解析
二.SAX解析
2、StAX解析;3、JDOM解析;4、DOM4J解析
其中前两种属于基础方法,...
import org.w3c.dom.Document;import org.w3c.dom.
Element
;import org.w3c.dom.
Node
List;
方法中应用:
Node
List
node
list1 = root.get
Element
sByTagName("
Content
");
String
Content
=
node
list1.item(0).getTex
没有为类型
Node
定义方法
getText
Content
(zz)
晚上下班的时候,把班上写了半截的代码带了回来。结果回到家后出乎意料的是回来的时候将代码导入eclipse后,下面这行代码就直接报错了,显示
getText
Content
()未定义 。
((
Element
) ele.get
Element
sByTagName( "err_code").item(0 )).ge
import java.io.FileInputStream;
import java.io.FileOutputStream;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.
Element
;
import org.w3c.dom.
Node
;
import org.w3c.dom.
Node
List;public class XmlCompare {
public static void main(String[] args) throws Exception {
// 读取文件
File file1 = new File("xml1.xml");
File file2 = new File("xml2.xml"); // 解析文件
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc1 = db.parse(file1);
Document doc2 = db.parse(file2); // 建立对比文件
Document doc3 = db.newDocument();
Element
root
Element
= doc3.create
Element
("root");
doc3.appendChild(root
Element
); // 开始对比
compareXml(doc1.getDocument
Element
(), doc2.getDocument
Element
(), root
Element
); // 写入文件
TransformerFactory tff = TransformerFactory.newInstance();
Transformer tf = tff.newTransformer(); DOMSource source = new DOMSource(doc3);
FileOutputStream out = new FileOutputStream("difference.xml");
StreamResult result = new StreamResult(out); tf.transform(source, result);
out.close();
} public static void compareXml(
Element
element
1,
Element
element
2,
Element
root
Element
) {
// 对比
element
1和
element
2的所有属性
if(!compare
Element
(
element
1,
element
2, root
Element
)) {
// 如果不相等,则把
element
1的内容记录下来
Element
element
= root
Element
.getOwnerDocument().create
Element
("
value
");
element
.setAttribute("type", "modify");
element
.setAttribute("name",
element
1.get
Node
Name());
element
.setAttribute("
value
",
element
1.
getText
Content
());
root
Element
.appendChild(
element
);
} // 对比
element
1和
element
2的子节点
Node
List
node
List1 =
element
1.getChild
Node
s();
Node
List
node
List2 =
element
2.getChild
Node
s();
for (int i = 0; i <
node
List1.getLength(); i++) {
Node
node
1 =
node
List1.item(i);
if (
node
1.get
Node
Type() ==
Node
.
ELEMENT
_
NODE
) {
Element
e1 = (
Element
)
node
1;
Node
node
2 = find
Node
(
node
List2, e1.get
Node
Name());
if (
node
2 != null) {
Element
e2 = (
Element
)
node
2;
compareXml(e1, e2, root
Element
);
} else {
// 如果
element
2中没有找到,则记录下来
Element
element
= root
Element
.getOwnerDocument().create
Element
("
value
");
element
.setAttribute("type", "add");
element
.setAttribute("name", e1.get
Node
Name());
element
.setAttribute("
value
", e1.
getText
Content
());
root
Element
.appendChild(
element
);
} // 对比
element
2中多余的节点
for (int i = 0; i <
node
List2.getLength(); i++) {
Node
node
2 =
node
List2.item(i);
if (
node
2.get
Node
Type() ==
Node
.
ELEMENT
_
NODE
) {
Element
e2 = (
Element
)
node
2;
Node
node
1 = find
Node
(
node
List1, e2.get
Node
Name());
if (
node
1 == null) {
Element
element
= root
Element
.getOwnerDocument().create
Element
("
value
");
element
.setAttribute("type", "del");
element
.setAttribute("name", e2.get
Node
Name());
element
.setAttribute("
value
", e2.
getText
Content
());
root
Element
.appendChild(
element
);
} public static boolean compare
Element
(
Element
element
1,
Element
element
2,
Element
root
Element
) {
if (!
element
1.get
Node
Name().equals(
element
2.get
Node
Name()) || !
element
1.
getText
Content
().equals(
element
2.
getText
Content
())) {
return false;
return true;
} public static
Node
find
Node
(
Node
List
node
List, String
node
Name) {
for (int i = 0; i <
node
List.getLength(); i++) {
Node
node
=
node
List.item(i);
if (
node
.get
Node
Name().equals(
node
Name)) {
return
node
;
return null;