terry9682 2011-02-13 13:05 采纳率: 0%
浏览 216
已采纳

各位,我写了一个把包含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;
    }
    
    
}
  • 写回答

2条回答

  • iteye_18182 2011-02-14 09:59
    关注

    获取结果的方法错了应该是
    [code="java"]
    id = root.getFirstChild().getTextContent();

    name = root.getChildNodes().item(1).getTextContent();

    content = root.getChildNodes().item(2).getTextContent();
    [/code]

    transferStringToDocument2 这个方法和当明编码格式有关最好不要用

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥15 stable diffusion
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件