用java遍历修改xml文件?
例如有文件如下:a.xml 
-------------------------------------- 
<?xml version="1.0" encoding="GBK"?> 
<LordData> 
<LordDataHeader> 
<MessageType>God </MessageType> 
</LordDataHeader> 
<LordDataBody> 
<DATA> 
<UserArea> 
&lt;![CDATA[ 
&lt;List&gt; &lt;Row&gt; 
&lt;name&gt;Tommiaomiao&lt;/name&gt; 
&lt;age&gt;11 &lt;/age&gt; 
&lt;/Row&gt; 
&lt;/List&gt;]]&gt; 

</UserArea> 
</DATA> 
</LordDataBody> 
</LordData> -------------------------------------- 那么转换后,a.xml应该如下: 
-------------------------------------- 
<?xml version="1.0" encoding="GBK"?> 
<LordData> 
<LordDataHeader> 
<MessageType>God </MessageType> 
</LordDataHeader> 
<LordDataBody> 
<DATA> 
<UserArea> 
<![CDATA[ 
<List> <Row> 
<name>Tomomiaomiao</name> 
<age>11 </age> 
</Row> 
</List>]]> 
</UserArea> 
</DATA> 
</LordDataBody> 
</LordData> 
-------------------------------------- 
求高手给藕一份代码哦。 

解决方案 »

  1.   

    用DOM4J, 下面是几个常用的接口:使用前首先记载文档:
    Document document = new SAXReader().read(
    Thread.currentThread().getContextClassLoader().getResourceAsStream(filePath)
    );获取标签为"element"的节点下的所有"node"节点, 也就是<element><node></node></element>
    document.selectNodes("//element/node"); 返回的是一个list.获取一个"node"节点就是从那个list中get一个咯,java基本语法..
    节点对应类是Element, 也就是Element node = list.get(...);获取节点上属性的值:
    element.attributeValue("节点名字")获取节点的所有标签为a的下级节点element.selectNodes("a")
      

  2.   


    private static void changeXML(String sourcefile){
    try {
    InputStream in=new FileInputStream(sourcefile);
    byte []input=new byte[in.available()];
    in.read(input);
    String s=new String(input,"iso-8859-1");
    s=s.replaceAll("&lt;", "<");
    s=s.replaceAll("&gt;", ">");
    System.out.println(s);

    } catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
      

  3.   

    &lt;![CDATA[ 
    &lt;List&gt; &lt;Row&gt; 
    &lt;name&gt;Tommiaomiao&lt;/name&gt; 
    &lt;age&gt;11 &lt;/age&gt; 
    &lt;/Row&gt; 
    &lt;/List&gt;]]&gt; 直接转码就可以了,这东西叫HTML字符实体(HTML Character Entities),一个字符实体(Character Entity)分成三部分:第一部分是一个&符号,英文叫ampersand;第二部分是实体(Entity)名字或者是#加上实体(Entity)编号;第三部分是一个分号。
    处理好编码,servlet用request.getParameter()就可以自动转换。
    或者用Apache的commons-codec。如果你只是要转换后的内容的话,一个简单方法,
    把内容保存为html文件,直接打开就看到了。
      

  4.   

    还不如一行一行的读...写到一个新的xml文件中...用流的读写就可以...
      

  5.   


    恩,不错了;但是要求
    1.如果节点内的文本内容里有HTML字符实体,则不让转换,
    2.如果点内的文本内容里有&lt;等特殊符号,必须转换为HTML字符实体
    该怎么办?
      

  6.   

    to: lcwlyl(网络精灵)
     
    servlet用request.getParameter()就可以自动转换。 
    或者用Apache的commons-codec。
    --------
    这个可以帮我生产上面格式的文件吗,能再说清楚一点吗,我觉得好像不行吧?
      

  7.   

    楼主说的HTML字符实体是什么意思?是看到的效果吗?&lt;之类的就是HTML字符实体了。
    还是不太明白你具体要什么效果。
      

  8.   

    对不起,我记错了,commons-codec是对url编码处理的。
    我没有现成的方法,提供下思路:
    1、用3楼的方法,把一些常用的转换一下一般就够用了。
    2、它有个对照表,你从网上查一下,以对照表为库,遍历转换。
    3、找解析html的方法,直接可以转换。
    4、最好找到直接解析的方法,因为要解析整个html会影响效率,刚才找了一下,没找到。
      

  9.   

    今天下午看代码时发现spring里面有类似的工具。用的时候需要用spring-core-2.5.6.jar、spring-web-2.5.6.jar。导入import org.springframework.web.util.HtmlUtils;
    方法代码:    public static void changeXML(String sourcefile){
            try {
                InputStream in=new FileInputStream(sourcefile);
                    byte []input=new byte[in.available()];
                    in.read(input);
                    String s=new String(input,"iso-8859-1");
                    s=HtmlUtils.htmlUnescape(s);//这句是解析html
                    System.out.println(s);
                
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
      

  10.   

    UserArea中间的部分实际是另一个xml文件,以字符串的形式加入到当前xml文件的节点下了。把这个字符串取出来,再构造成Document,然后把这个Document里的节点取出来往原来的里面复制就可以了。