`

使用java自带的xml库进行xml读取

    博客分类:
  • java
 
阅读更多

根据自己debug调试,我觉得对自带的DOM解析有三点需要注意

  1. DOM将回车(换行符)和节点内容(Value)都是作为节点来解析的。因此会导致一个节点如果没有内容或者节点里面直接是子节点的话也会有内容,不过是"\n"和"\t"组合成的。例:
    <root>
    </root>
    或者
    <root>
          <a>sss</a>
    </root>
     在这种情况下会直接输出为:
    <root>
    
    
    </root>
    或者
    <root>
    
          <a>
                sss
           </a>
    
    </root>
     
  2. 因为第一点,DOM将节点进行了分类,主要是有两类:TEXT_NODE ,ELEMENT_NODE,通过对节点的类型判断,可以很好的解析和过滤所有的节点。
  3. DOM在获取TETX_NODE类型的节点的内容时,如果是回车(换行符),解析后的内容是由一个或多个的"\n","\t"组成的字符串,而内容(Value)节点解析后的则就是其值,不含"\n","\t"。

正确的例子代码如下:

public static void main(String[] args) throws SAXException, IOException, ParserConfigurationException{
		DocumentBuilder docBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
		Document doc = docBuilder.parse(new File("books.xml"));
		printXmlHeader(doc.getXmlVersion(), doc.getXmlEncoding());
		printXml(doc.getDocumentElement(), 0);
	}
	
	/**
	 * 输出xml头
	 * @param version
	 * @param encode
	 */
	private static void printXmlHeader(String version, String encode){
		System.out.println("<?xml version=\"" + version + "\" encoding=\"" + encode + "\">");
	}
	
	/**
	 * 输出xml的内容
	 * @param ele 为节点对象
	 * @param depth 为节点深度
	 */
	private static void printXml(Element ele, int depth){
		//根据xml子节点的深度进行缩进
		printTabWithXmlDepth(depth);
		
		String tagName = ele.getTagName();
		System.out.print("<" + tagName);
		//输出属性
		if(ele.hasAttributes()){
			NamedNodeMap map = ele.getAttributes();
			for(int index = 0; index < map.getLength(); index++){
				Node node = map.item(index);
				System.out.print(" " + node.getNodeName() + "=\"" + node.getNodeValue() + "\"");
			}
		}
		System.out.println(">");
		
		//输出该节点的子节点以及内容
		if(ele.hasChildNodes()){
			NodeList nodeList = ele.getChildNodes();
			for(int index = 0; index <nodeList.getLength(); index++){
				Node node = nodeList.item(index);
				//判断该子节点是否也是一个节点
				if(node.getNodeType() == Node.ELEMENT_NODE){
					printXml((Element)node, depth+1);
				}else if(node.getNodeType() == Node.TEXT_NODE){
					String value = node.getNodeValue();
					//DOM在获取TETX_NODE类型的节点的内容时,如果是回车(换行符),解析后的内容是由一个或多个的"\n","\t"组成的字符串,而内容(Value)节点解析后的则就是其值,不含"\n","\t"。
					value = value.replaceAll("\n", "").replaceAll("\r", "").trim();
					if(!"".equals(value)){
						printTabWithXmlDepth(depth+1); //由于内容需要在当前节点的情况下进行缩进
						//System.out.print(node.getParentNode().getNodeName() + "="); //输出当前node的名字
						System.out.println(value);
					}
				}
			}
		}
		
		//收尾,如</root>
		printTabWithXmlDepth(depth);
		System.out.println("</" +tagName + ">");
	}
	
	/**
	 * 缩进
	 * @param depth
	 */
	private static void printTabWithXmlDepth(int depth){
		for(int i = 0; i < depth; i++){
			System.out.print("\t");
		}
		
	}

输出结果如下:

<?xml version="1.0" encoding="UTF-8">
<root>
	ssss
	<books>
		<book id="1" name="中国近现代史">
			<author>
				张三
			</author>
			<publisTime>
				2010-9-20
			</publisTime>
		</book>
		<book id="2" name="世界历史">
			<author>
				Rose
			</author>
			<publisTime>
				2001-12-10
			</publisTime>
		</book>
	</books>
</root>
 

 

分享到:
评论

相关推荐

    java读取xml文件生成文件

    java读取xml文件 ,程序自带jar包在mylib下,加入工程即可,工程导入可用,更具自己需要读取xml文件生成所需文件。

    PULL解析xml的demo

    通用性强,它会将XML文件的所有内容读取到内存中,然后使用DOM API遍历XML树、检索所需的数据; 优点:简单直观,但需要将文档读取到内存, 缺点:并不太适合移动设备; 2,SAX SAX是一个解析速度快并且占用内存少的...

    Matlab解析XML文件.rar

    Matlab使用JAVA虚拟机来处理XML文件,默认给出了三个用于处理XML的函数: l xmlread(), 用于读取XML文件内容,读入后的变量是一个Java XML object。 l xmlwrite(), 用于写入XML文件内容,同样输出变量也要是一个...

    JAVA上百实例源码以及开源项目

    Java读写文本文件的示例代码 1个目标文件。 java俄罗斯方块 一个目标文件。 Java非对称加密源码实例 1个目标文件 摘要:Java源码,算法相关,非对称加密  Java非对称加密源程序代码实例,本例中使用RSA加密技术,...

    JAVA上百实例源码以及开源项目源代码

    Java读写文本文件的示例代码 1个目标文件。 java俄罗斯方块 一个目标文件。 Java非对称加密源码实例 1个目标文件 摘要:Java源码,算法相关,非对称加密  Java非对称加密源程序代码实例,本例中使用RSA加密技术,...

    java开源包8

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包11

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包6

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包9

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包4

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包101

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包5

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包10

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包1

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包3

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开发常用jar包

    是一个Java的XML API,类似于jdom,用来读写XML文件的。Hibernate使用dom4j解析XML配置文件和XML映射元文件。必需的。 ehcache-1.2.jar Hibernate可以使用不同cache缓存工具作为二级缓存。EHCache是缺省的cache...

    Java资源包01

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包2

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包7

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

Global site tag (gtag.js) - Google Analytics