相关文章推荐
喝醉的卤蛋  ·  分享 8 个 Laravel ...·  2 年前    · 
成熟的鼠标垫  ·  delphi ...·  3 年前    · 
怕老婆的手套  ·  统计S3 ...·  3 年前    · 
紧张的小熊猫  ·  求助dx11 feature level ...·  3 年前    · 

在学习DOM解析XML的内容时,最先学习了读取XML中的内容,但是利用getNodeValue()方法时,常常获得null;要不然就是报NullPointerException空指针错误。于是我就查阅了相关的内容,将这个知识点总结一下。首先贴出我的XML中的内容:

<?xml version="1.0" encoding="UTF-8"?>
<Languages cat="it">
	<lan id="1">
		<name>Java</name>
		<ide>Eclipse</ide>
	</lan>
	<lan id="2">
		<name>Swift</name>
		<ide>Xcode</ide>
	</lan>
	<lan id="3">
		<name>C#</name>
		<ide>Visual Studio</ide>
	</lan>
</Languages>

我要获取name节点中的java,于是我写了以下代码:

public class ReadXML {
	public static void main(String[] args) {
		try {
			// 读取languiages.xml的内容
			DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
			DocumentBuilder builder = factory.newDocumentBuilder();
			Document document = builder.parse(new File("languages.xml"));
			// 获取标签为lan的节点集合
			NodeList list = document.getElementsByTagName("lan");
			//输出第一个节点的name值Java
			System.out.println("-------输出内容---------");
			System.out.println("name的值="+list.item(0).getFirstChild().getNodeValue());
		} catch (ParserConfigurationException | SAXException | IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();

输出内容如下:
-------输出内容---------
name的值=

没有得到我想要的Java这个值,于是我开始查找资料,首先重新认识了xml的树状结构,本xml文件的树状结构如下所示:
在这里插入图片描述
name中的java也属于一个节点,是文本节点,所以根据结构特点,我修改了代码:

public class ReadXML {
	public static void main(String[] args) {
		try {
			// 读取languiages.xml的内容
			DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
			DocumentBuilder builder = factory.newDocumentBuilder();
			Document document = builder.parse(new File("languages.xml"));
			// 获取标签为lan的节点集合
			NodeList list = document.getElementsByTagName("lan");
			//输出第一个节点的name值Java
			System.out.println("-------输出内容---------");
			System.out.println("name的值="+list.item(0).getFirstChild().getFirstChild().getNodeValue());
		} catch (ParserConfigurationException | SAXException | IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();

在这里插入图片描述却出现了空指针异常,于是我又开始查找资料,原来xml中把空格、tab、回车都当成node,所以系统无法输出预定的值。我改进了一下代码,同时验证回车当作node的说法:

public class ReadXML {
	public static void main(String[] args) {
		try {
			// 读取languiages.xml的内容
			DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
			DocumentBuilder builder = factory.newDocumentBuilder();
			Document document = builder.parse(new File("languages.xml"));
			// 获取标签为lan的节点集合
			NodeList list = document.getElementsByTagName("lan");
			//输出第一个节点的name值Java
			System.out.println("-------输出内容---------");
	        NodeList cList=list.item(0).getChildNodes();
			System.out.println("第一个lan下子节点的个数="+cList.getLength());
			//第一个节点是回车,所以name应该是第二个节点
			System.out.println("name的值="+cList.item(1).getFirstChild().getNodeValue());
		} catch (ParserConfigurationException | SAXException | IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();

在这里插入图片描述
因此验证了回车也是一个node的说法,第一个lan中的5个节点分别为:
1、回车
2、name
3、回车
4、ide
5、回车
至此完成了获取第一个name节点存储的值“java”,在此次学习过程中主要遇到了一个难点:数据的结构!
以上的代码仅作为帮助了解xml中数据结构的简单demo,实际运用中有很多方法,这里不再陈列。

在学习DOM解析XML的内容时,最先学习了读取XML中的内容,但是利用getNodeValue()方法时,常常获得null;要不然就是报NullPointerException空指针错误。于是我就查阅了相关的内容,将这个知识点总结一下。首先贴出我的XML中的内容:&lt;?xml version="1.0" encoding="UTF-8"?&gt;&lt;Languages cat="it"... &lt;?xml version=\"1.0\" encoding=\"UTF-8\" ?&gt; &lt;User&gt; &lt;city country="中国"&gt;南京&lt;/city&gt; &lt;name&gt;刘文
xml。。。。很常用,写个配置文件、传个平台无关的数据。。。很常见 但是为这些xml编写规范的DTD或者schema的。。。不太常见。。因为太麻烦。。。xml人人都看得懂,费那劲干嘛。。。。 以前都用dom4j之类的框架,好用。。。随便用。。。 后来用不了了,老老实实拿org.w3c.dom来写。。。 比如这个xml: admin 太简单了: Docu...
Java中可以使用XPath来获取XML文档中节点的值。 首先,需要创建一个`javax.xml.xpath.XPath`对象,然后使用`XPathExpression`来编译XPath表达式,最后使用`XPathExpression.evaluate`方法来执行XPath表达式并获取节点的值。 例如,下面的代码演示了如何使用XPath获取XML文档中的节点值: ```java import javax.xml.xpath.XPath; import javax.xml.xpath.XPathConstants; import javax.xml.xpath.XPathExpression; import javax.xml.xpath.XPathFactory; import org.w3c.dom.Document; import org.w3c.dom.NodeList; // ... XPathFactory xpathFactory = XPathFactory.newInstance(); XPath xpath = xpathFactory.newXPath(); // 编译XPath表达式 XPathExpression expr = xpath.compile("/root/node/text()"); // 执行XPath表达式并获取节点列表 NodeList nodes = (NodeList) expr.evaluate(doc, XPathConstants.NODESET); // 遍历节点列表并输出节点的值 for (int i = 0; i < nodes.getLength(); i++) { System.out.println(nodes.item(i).getNodeValue()); 其中,`doc`是一个`org.w3c.dom.Document`对象,表示XML文档。 注意,需要导入以下依赖才能使用上述代码: import javax.xml.xpath.XPath; import javax.xml.xpath.XPathConstants; import javax.xml.xpath.XPathExpression; import javax.xml.xpath.XPathFactory;