用java遍历修改xml文件?
例如有文件如下:a.xml
--------------------------------------
<?xml version="1.0" encoding="GBK"?>
<LordData>
<LordDataHeader>
<MessageType>God </MessageType>
</LordDataHeader>
<LordDataBody>
<DATA>
<UserArea>
<![CDATA[
<List> <Row>
<name>Tommiaomiao</name>
<age>11 </age>
</Row>
</List>]]>
</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>
--------------------------------------
求高手给藕一份代码哦。
例如有文件如下:a.xml
--------------------------------------
<?xml version="1.0" encoding="GBK"?>
<LordData>
<LordDataHeader>
<MessageType>God </MessageType>
</LordDataHeader>
<LordDataBody>
<DATA>
<UserArea>
<![CDATA[
<List> <Row>
<name>Tommiaomiao</name>
<age>11 </age>
</Row>
</List>]]>
</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>
--------------------------------------
求高手给藕一份代码哦。
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")
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("<", "<");
s=s.replaceAll(">", ">");
System.out.println(s);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
<List> <Row>
<name>Tommiaomiao</name>
<age>11 </age>
</Row>
</List>]]> 直接转码就可以了,这东西叫HTML字符实体(HTML Character Entities),一个字符实体(Character Entity)分成三部分:第一部分是一个&符号,英文叫ampersand;第二部分是实体(Entity)名字或者是#加上实体(Entity)编号;第三部分是一个分号。
处理好编码,servlet用request.getParameter()就可以自动转换。
或者用Apache的commons-codec。如果你只是要转换后的内容的话,一个简单方法,
把内容保存为html文件,直接打开就看到了。
恩,不错了;但是要求
1.如果节点内的文本内容里有HTML字符实体,则不让转换,
2.如果点内的文本内容里有<等特殊符号,必须转换为HTML字符实体;
该怎么办?
servlet用request.getParameter()就可以自动转换。
或者用Apache的commons-codec。
--------
这个可以帮我生产上面格式的文件吗,能再说清楚一点吗,我觉得好像不行吧?
还是不太明白你具体要什么效果。
我没有现成的方法,提供下思路:
1、用3楼的方法,把一些常用的转换一下一般就够用了。
2、它有个对照表,你从网上查一下,以对照表为库,遍历转换。
3、找解析html的方法,直接可以转换。
4、最好找到直接解析的方法,因为要解析整个html会影响效率,刚才找了一下,没找到。
方法代码: 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();
}
}