用JAVA解析不规范XML文件

任务:读取一个没有root element的xml文件里的内容。

(本来是要读取jboss 里定义好了的queue,但实在不知道有什么方法可以采用,只好直接读取自定义的xml文件了) 

翻阅了很多资料,java里对xml文件的读取大抵采用SAX,dom或者jdom方式。但无论用那种方法,在读取xml文件,生成一个Document 对象时均报错。

在相关xml文献里发现,xml的规范语法是需要包含一个root element的,而我需要读取的文档则没有写入root element。怎么办?

寻思了半天,想了个巨笨的方法,暂时先把文件转成inputstream读入内存,然后在字符串里人为加上一个根节点。最后利用普通解析xml文件的方法解析这段数据流。程序代码如下:

 

public string[] readXMLFile() throws javax.xml.parsers.ParserConfigurationException,
    org.xml.sax.SAXException, java.io.IOException {

        //将文件转换为字符串,然后添上root element

        String fileName = "test.xml";     
        FileReader fileIn = new FileReader(fileName);
        BufferedReader buf=new BufferedReader(fileIn);
        StringBuffer rets = new StringBuffer();
        String s = "";
        while(( s = buf.readLine()) != null){
            rets.append(s+"\n");
            s="";
        }
        buf.close();
        fileIn.close();
        String tmpXMLString = "<tmproot>" + rets.toString() + "</tmproot>";

        //构建 document object  ,并读取节点内容,并讲queue名称存入queueList中

        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder=factory.newDocumentBuilder();
        Document doc = builder.parse(new InputSource(new StringReader(tmpXMLString)));
       
        NodeList idents =doc.getElementsByTagName("queue");       
       
        Node tmpNode = null;
        int queueCount = idents.getLength();
        String[] queueList = new String[queueCount];
       
        for ( int i = 0 ; i < queueCount; i ++ ) {
             queueList[i] = idents.item(i).getTextContent();// SE v1.5

     //queueList[i] = tmpNode.getChildNodes().item(0).getNodeValue(); //SE v1.4     
         }

        return queueList;
    }

 

 暂时记录一下 ,等找到更合适的方法再替换。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值