java 写入xml怎么试都不对,尖括号怎么处理?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 写入xml怎么试都不对,尖括号怎么处理?相关的知识,希望对你有一定的参考价值。

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.XMLWriter;
public class XmlWrite
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException
// TODO Auto-generated method stub

XMLWriter writer = new XMLWriter(new FileWriter(new File("Foo.xml")));
writer.write(new XmlWrite().createDocument());
writer.close();

// FileWriter out = new FileWriter("foo.xml");
//
// new XmlWrite().createDocument().write(out);
// out.flush();
// out.close();


public Document createDocument()
Document document = DocumentHelper.createDocument();
Element root = document.addElement("Root");
Element author1 =
root
.addElement("author1")
.addAttribute("name", "James")
.addAttribute("location", "UK")
.addText("James<> <> Strachan");//这里的尖括号写入时怎么都不对
Element author2 =
root
.addElement("author2")
.addAttribute("name", "Bob")
.addAttribute("location", "US")
.addText("Bob McWhirter");
return document;



不要给我其他代码,我就说这个,我的问题一句话:尖括号无法写入xml,怎样转义都不行。

参考技术A 当然不行了,可以为期转义,看看html对它是怎么处理的,就知道了,追问

是xml

追答

html是XML规范的一种,一般有两种方法,一种是CDATA(公在xml中使用),一种是>替换>,<替换<(可在xml和html中使用),具体可以再去搜索这些关键字

参考技术B 你这里要尖括号干嘛?是想xml的两个标签之间的text显示有尖括号么?那你需要转义追问

怎么专义,我为什么总不成功?

参考技术C 写成这样试试.addText("James\<\> \<\> Strachan");追问

我这是java你的转义字符是无法转义某些符号的。

参考技术D 包括增加,删除,查询,主方法测式方法,下面有xml文档,记得导入jdom.jar
步骤是:
1、建立DocumentBuilderFactory
2、建立DocumentBuilder
3、解析xml文档
4、操作xml文档
5、建立TransformerFactory
6、建立Transformer
7、保存修改后的xml文档
下边是一个例子,希望可以帮到你
import java.io.File;
import java.io.IOException;
import java.util.HashMap;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.TransformerFactoryConfigurationError;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Attr;
import org.w3c.dom.DOMException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

public class Company

String fileXMLName;

public Company(String fileXMLName)
super();
this.fileXMLName = fileXMLName;


public void showList()
try
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
DocumentBuilder db=dbf.newDocumentBuilder();

Document doc=db.parse(this.fileXMLName);
NodeList n1=doc.getElementsByTagName("雇员");
for(int i=0;i<n1.getLength();i++)
Element guyuan=(Element)n1.item(i);
Attr bumen=guyuan.getAttributeNode("部门");
Attr quanzhi=guyuan.getAttributeNode("全职");
System.out.print("雇员"+(i+1));
if(bumen!=null)
System.out.println("部门:"+bumen.getValue());

if(quanzhi!=null)
System.out.println("全职:"+quanzhi.getValue());

NodeList xingming=guyuan.getElementsByTagName("姓名");
System.out.println("姓名:"+xingming.item(0).getFirstChild().getNodeValue());
NodeList gudate=guyuan.getElementsByTagName("雇佣日期");
System.out.println("雇佣日期:"+gudate.item(0).getFirstChild().getNodeValue());
NodeList qingdan=guyuan.getElementsByTagName("项目清单");
NodeList xiangmu=((Element)qingdan.item(0)).getElementsByTagName("项目");
for(int j=0;j<xiangmu.getLength();j++)
Element xiangmu2=(Element)xiangmu.item(j);
NodeList chanping=xiangmu2.getElementsByTagName("产品");
NodeList jiage=xiangmu2.getElementsByTagName("价格");
System.out.println("项目"+(j+1)+"产品:"+chanping.item(0).getFirstChild().getNodeValue());
System.out.println("项目"+(j+1)+"产品:"+jiage.item(0).getFirstChild().getNodeValue());


catch (DOMException e)
// TODO Auto-generated catch block
e.printStackTrace();
catch (ParserConfigurationException e)
// TODO Auto-generated catch block
e.printStackTrace();
catch (SAXException e)
// TODO Auto-generated catch block
e.printStackTrace();
catch (IOException e)
// TODO Auto-generated catch block
e.printStackTrace();


public void CreateOne(String chanping,String jiage)
try
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
DocumentBuilder db=dbf.newDocumentBuilder();
Document doc=db.parse(this.fileXMLName);
NodeList xingming=doc.getElementsByTagName("姓名");
Element xingming1=null;
for(int i=0;i<xingming.getLength();i++)
xingming1=(Element)xingming.item(i);
String name=xingming1.getFirstChild().getNodeValue();
if(name.equals("王权"))
Element guyuan=(Element)xingming1.getParentNode();
NodeList qingdan=guyuan.getElementsByTagName("项目清单");
Element qingdan1=(Element)qingdan.item(0);
Element xiangmu=doc.createElement("项目");
Element chan=doc.createElement("产品");
Element jia=doc.createElement("价格");
chan.appendChild(doc.createTextNode(chanping));
jia.appendChild(doc.createTextNode(jiage));
xiangmu.appendChild(chan);
xiangmu.appendChild(jia);
qingdan1.appendChild(xiangmu);
TransformerFactory tf=TransformerFactory.newInstance();
Transformer tr=tf.newTransformer();
tr.transform(new DOMSource(doc), new StreamResult(new File("newcompany.xml")));
break;



catch (DOMException e)
// TODO Auto-generated catch block
e.printStackTrace();
catch (TransformerConfigurationException e)
// TODO Auto-generated catch block
e.printStackTrace();
catch (ParserConfigurationException e)
// TODO Auto-generated catch block
e.printStackTrace();
catch (SAXException e)
// TODO Auto-generated catch block
e.printStackTrace();
catch (IOException e)
// TODO Auto-generated catch block
e.printStackTrace();
catch (TransformerFactoryConfigurationError e)
// TODO Auto-generated catch block
e.printStackTrace();
catch (TransformerException e)
// TODO Auto-generated catch block
e.printStackTrace();



public void deleteone(String bumen)

try
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
DocumentBuilder db=dbf.newDocumentBuilder();
Document doc=db.parse(this.fileXMLName);
NodeList gongsis=doc.getElementsByTagName("公司");
Element gongsi=(Element)gongsis.item(0);
NodeList guyuans=doc.getElementsByTagName("雇员");
Element guyuan=null;
for(int i=0;i<guyuans.getLength();i++)
guyuan=(Element)guyuans.item(i);
Attr bumens=guyuan.getAttributeNode("部门");
if((bumens!=null)&&(bumens.getValue().equals(bumen)))
gongsi.removeChild(guyuan);


TransformerFactory tf=TransformerFactory.newInstance();
Transformer tr=tf.newTransformer();
tr.transform(new DOMSource(doc), new StreamResult(new File("newcompany.xml")));
catch (DOMException e)
// TODO Auto-generated catch block
e.printStackTrace();
catch (TransformerConfigurationException e)
// TODO Auto-generated catch block
e.printStackTrace();
catch (ParserConfigurationException e)
// TODO Auto-generated catch block
e.printStackTrace();
catch (SAXException e)
// TODO Auto-generated catch block
e.printStackTrace();
catch (IOException e)
// TODO Auto-generated catch block
e.printStackTrace();
catch (TransformerFactoryConfigurationError e)
// TODO Auto-generated catch block
e.printStackTrace();
catch (TransformerException e)
// TODO Auto-generated catch block
e.printStackTrace();



public static void main(String[] args)
// TODO Auto-generated method stub

Company com=new Company("newcompany.xml");
com.showList();
//com.CreateOne("液晶显示器", "200");
//Company com1=new Company("newcompany.xml");
//com1.showList();
com.deleteone("客服部");
Company com2=new Company("newcompany.xml");
com2.showList();




xml文档格式
<?xml version="1.0" encoding="UTF-8"?><!--内部定义--><公司>
<雇员 全职="是" 部门="市场部">
<姓名>李东</姓名>
<雇佣日期>2005-01-15</雇佣日期>
<项目清单 数量="2">
<项目>
<产品>打印机</产品>
<价格>$111.00</价格>
</项目>
<项目>
<产品>笔记本</产品>
<价格>$9897.00</价格>
</项目>
</项目清单>
</雇员>
</公司>

数据写入redis并返回怎么处理

参考技术A 1、 快照的方式持久化到磁盘
自动持久化规则配置
save 900 1
save 300 10
save 60 10000
上面的配置规则意思如下:
# In the example below the behaviour will be to save:
# after 900 sec (15 min) if at least 1 key changed
# after 300 sec (5 min) if at least 10 keys changed
# after 60 sec if at least 10000 keys changed
redis也可以关闭自动持久化,注释掉这些save配置,或者save “”
如果后台保存到磁盘发生错误,将停止写操作.
stop-writes-on-bgsave-error yes
使用LZF压缩rdb文件,这会耗CPU, 但是可以减少磁盘占用.
rdbcompression yes
保存rdb和加载rdb文件的时候检验,可以防止错误,但是要付出约10%的性能,可以关闭他,提高性能。
rdbchecksum yes
导出的rdb文件名
dbfilename dump.rdb
设置工作目录, rdb文件会写到该目录, append only file也会存储在该目录下.
dir ./
Redis自动快照保存到磁盘或者调用bgsave,是后台进程完成的,其他客户端仍然和可以读写redis服务器,后台保存快照到磁盘会占用大量内存。调用save保存内存中的数据到磁盘,将阻塞客户端请求,直到保存完毕。
调用shutdown命令,Redis服务器会先调用save,所有数据持久化到磁盘之后才会真正退出。
对于数据丢失的问题:
如果服务器crash,从上一次快照之后的数据将全部丢失。所以在设置保存规则的时候,要根据实际业务设置允许的范围。
如果对于数据敏感的业务,在程序中要使用恰当的日志,在服务器crash之后,通过日志恢复数据。
2、 Append-only file 的方式持久化

另外一种方式为递增的方式,将会引起数据变化的操作, 持久化到文件中, 重启redis的时候,通过操作命令,恢复数据.

每次执行写操作命令之后,都会将数据写到server.aofbuf中。
# appendfsync always
appendfsync everysec
# appendfsync no

当配置为always的时候,每次server.aofbuf中的数据写入到文件之后,才会返回给客户端,这样可以保证数据不丢,但是频繁的IO操作,会降低性能。

everysec每秒写一次,这可能会丢失一秒内的操作。

aof最大的问题就是随着时间append file会变的很大,所以我们需要bgrewriteaof命令重新整理文件,只保留最新的kv数据。

以上是关于java 写入xml怎么试都不对,尖括号怎么处理?的主要内容,如果未能解决你的问题,请参考以下文章

java中怎么把list的信息写入到xml

比较流行 java xml解析器有几种 名子是啥?

java怎么把解析的xml数据添加到数据库中

我随便输入网络名的时候,为啥老是包含一个或多个无效字符,要键入其他字符,怎么试都一样

在帝国cms中加入了JS代码用来显示系统时间,但是无论怎么试都无效,显示不出来时间,求大神帮忙 谢谢

数据写入redis并返回怎么处理