各位,我写了一个把包含XML信息的String转化成Docuemnt对象的方法,为什么总是不对啊?

问题描述

package com.unittest;import java.io.ByteArrayInputStream;import java.io.IOException;import java.io.StringReader;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import javax.xml.parsers.ParserConfigurationException;import junit.framework.TestCase;import org.w3c.dom.Document;import org.w3c.dom.Element;import org.xml.sax.InputSource;import org.xml.sax.SAXException;public class StringXMLTest extends TestCase {public void testConsole(){String xml1 = "<CODEITEM><ID>10004</ID><NAME>4</NAME><CONTENT>it is the 4th item</CONTENT></CODEITEM>";String xml2 = "<CODEITEM><ID>10004</ID><NAME>4</NAME><CONTENT>这是第4个item。</CONTENT></CODEITEM>";String xml3 = "<CODEITEM><ID><![CDATA[10004]]></ID><NAME><![CDATA[4]]></NAME><CONTENT><![CDATA[这是第4个item。]]></CONTENT></CODEITEM>";String xml4 = "<?xml version="1.0" encoding="UTF-8" standalone="no"?><CODEITEM><ID><![CDATA[10004]]></ID><NAME><![CDATA[4]]></NAME><CONTENT><![CDATA[这是第4个item。]]></CONTENT></CODEITEM>";String[] xml = new String[]{xml1,xml2,xml3,xml4};Document doc;Element root;String id,name,content;try {for (int i = 0; i < xml.length; i++) {System.out.println("xml" + (i+1) + ":");System.out.println("method1:");doc = transferStringToDocument1(xml[i]);root = (Element) doc.getElementsByTagName("CODEITEM").item(0);id = root.getAttribute("ID");name = root.getAttribute("NAME");content = root.getAttribute("CONTENT");System.out.println("id = " + id);System.out.println("name = " + name);System.out.println("content = " + content);System.out.println("method2:");doc = transferStringToDocument2(xml[i]);root = (Element) doc.getElementsByTagName("CODEITEM").item(0);id = root.getAttribute("ID");name = root.getAttribute("NAME");content = root.getAttribute("CONTENT");System.out.println("id = " + id);System.out.println("name = " + name);System.out.println("content = " + content + "n");}} catch (Exception e) {e.printStackTrace();}}private Document transferStringToDocument1(String s) throws ParserConfigurationException, SAXException, IOException{StringReader reader = new StringReader(s);InputSource is = new InputSource(reader);DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();Document doc = builder.parse(is);return doc;}private Document transferStringToDocument2(String s) throws ParserConfigurationException, SAXException, IOException{DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();Document doc = builder.parse(new ByteArrayInputStream(s.getBytes()));return doc;}}

解决方案

获取结果的方法错了应该是id = root.getFirstChild().getTextContent(); name = root.getChildNodes().item(1).getTextContent(); content = root.getChildNodes().item(2).getTextContent(); transferStringToDocument2 这个方法和当明编码格式有关最好不要用
解决方案二:
root = (Element) doc.getFirstChild();Element idElement = (Element) root.getElementsByTagName("ID").item(0);Element nameElement = (Element) root.getElementsByTagName("NAME").item(0);Element contentElement=(Element) root.getElementsByTagName("CONTENT").item(0);id = idElement.getTextContent();name = nameElement.getTextContent();content = contentElement.getTextContent();

时间: 2024-08-01 09:50:12

各位,我写了一个把包含XML信息的String转化成Docuemnt对象的方法,为什么总是不对啊?的相关文章

写了一个Java读取XML文件的工具类

xml 如果我们有下面的一个XML文件,可以把它想象成一个Relation Database中的Table, 这个XML文件就是一个名字为managers的关系表,而一个<manager>所包含的就是一条记录(Record),而manager中的service和implementation就是一个个的栏位(Field) ! managers table  +  service implementation net.csdn.blog.xport.IDBConnectionManager net

XML文件转化成NSData对象的方法_javascript技巧

  NSData *xmlData = [[NSData alloc]initWithContentsOfFile:[NSString stringWithFormat:@"%@/People.xml",[[NSBundle mainBundle] resourcePath]]]; //2.将xmlData转化成xml文档 GDataXMLDocument *xmlDocument = [[GDataXMLDocument alloc]initWithData:xmlData opti

用c++写了一个函数判断一个数组是否包含另一个数组 但是总是返回-1 请大神们帮忙看看错在哪里

问题描述 用c++写了一个函数判断一个数组是否包含另一个数组 但是总是返回-1 请大神们帮忙看看错在哪里 int substr_index( const char substr[], const char str[]) { int flag = -1; int sizeOfSubstr = sizeof(substr)/sizeof(char); int sizeOfStr = sizeof(str)/sizeof(char); for (int i = 0; i < sizeOfStr; i+

C#多个XML文件合并 然后生成一个新的XML文件代码怎么写

问题描述 读取多个xml文件然后合并生成一个新的XML文件代码怎么写大神给实际例子谢谢! 解决方案 解决方案二:没具体需求的?那我随便给你找个了啊解决方案三:本帖最后由 starfd 于 2015-11-04 12:36:49 编辑解决方案四:就是把所有的xml文件整合到一个里面解决方案五:那2楼的满足你了啊--就是读取出来然后Add给Root节点解决方案六:能发下具体代码例子吗解决方案七:2楼链接打开有具体代码--解决方案八:加我QQ远程帮我看看1587292914解决方案九:如果你的xml没

printf-设有一个顺序表A,包含n个元素,要求写出一个将该表逆置的算法,

问题描述 设有一个顺序表A,包含n个元素,要求写出一个将该表逆置的算法, #include #define MaxLen 50 typedef int elemtype: typedef elemtype sqlist [MaxLen]: int create (sqlist A) { int i,n: printf("创建一个顺序表n"): printf("输入元素个数:"): scanf( ): for (i=0:i<n:i++) { printf(&qu

wsdl-建立webserviceclient,调用接口,自己写出一个xml作为参数传回去,怎么传

问题描述 建立webserviceclient,调用接口,自己写出一个xml作为参数传回去,怎么传 1C 是不是一定要按对方给的xml格式写好xml,只穿几个参数会影响到对方解析参数么,

java正则表达式,怎么写一个match包含空格的pattern?

问题描述 java正则表达式,怎么写一个match包含空格的pattern? public static void main(String[] args){ Pattern pattern = Pattern.compile("\s*|t|r|n");//这里不会写 Matcher m=pattern.matcher("vv vv"); System.out.println(m.matches()); } 解决方案 Pattern pattern = Pattern

webwork中怎么在xml文件中定义一个action包含多个method?

问题描述 webwork中怎么在xml文件中定义一个action包含多个method? 在xml文件里怎么配置?? 解决方案 <!DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 1.1.1//EN" "http://www.opensymphony.com/xwork/xwork-1.1.1.dtd"><xwork> <package name="userManager&q

用C#写了一个SLE4442加密卡充值售电软件,源代码中包含写卡密码,C#源码可用.Net Reflector 反编译的话,那写卡密码岂不是很容易泄露

问题描述 用C#写了一个SLE4442加密卡充值售电软件,源代码中包含写卡密码,C#源码可用.NetReflector反编译的话,那写卡密码岂不是很容易泄露.请问如何解决这个问题.谢谢大家. 解决方案 解决方案二:你的充值售电软件会网上公开吗解决方案三:引用1楼andywangguanxi的回复: 你的充值售电软件会网上公开吗 不在网上公开,但是,如果我们当地的同行业竞争对手搞到我们的软件(那是很容易的),而后反编译,那就可以仿造我们的产品,以低价争抢我们原有的客户资源,那是很危险的.解决方案四