java采用jdom生成xml时如何生成&,不要带有amp

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java采用jdom生成xml时如何生成&,不要带有amp相关的知识,希望对你有一定的参考价值。

在编写java代码时,我写的是:
Attribute attrib_Range=new Attribute("resource","&xsd;"+“integer”);
生成结果显示:resource="&xsd;integer"

我想要的结果是resource="&xsd;integer"
如何能去掉那个amp啊
生成的结果在xsd与&中间多了amp,在百度提问中无法显示

XML 中 ‘&’ 字符是特殊字符,就好像 Java 语言的关键字一个,不能直接在内容中使用,比如:我们看到一个 '>' 时就会用 > 表示,这里 & 就是特殊用法,所以一个普通的 & 就必须转义成 &来表示。保存成为 XML 文本时必须是 & 但最终显示出来给人看的时候应该是& ,如果显示出来的不是‘&’这就表示程序有 bug,比如,现在你说的百度它就把 &已经转换成了 '&' 这是期望的结果,如果你希望百度显示出 &来就应该把 '&' 转换两次,第一次得到 & 再转换一次得到 & 这样百度就拿你没办法了,数据就会如你所期望地 显示成为 &xsd;integer 。你现在看到我回复的这个答案就是我已经连续地写了两边 amp; 才得到的。在代码中应该是当你想把它以“源码”的形式显示出来我们需要连续两次地 escape 转义。 参考技术A 首先,xml中&符号是有特殊含义的,会被解释为一个实体的开始,所以必须使用实体代替其本身。&在xml中对应的实体为'&'

如果想直接使用&符号,则只能在<![CDATA[...]]>中使用,CDATA区域中的所有内容都会被解释为普通文本。

jdom生成CDATA,直接使用CDATA类即可。

Element cdataContent = new Element('content');
CDATA content = new CDATA("abc&def<");
cdataContent.addContent(content);

这样的话,CDATA中的特殊符号是不会被转义的

java生成xml

import java.io.File;
import java.io.FileOutputStream;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Map.Entry;

import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.output.Format;
import org.jdom2.output.XMLOutputter;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.wrt.zjg.webservices.model.FtpModel;

public class JavaToXML {

public void BuildJsonToXMLDoc(JSONObject resMain) throws Exception {
//String xmlPath = "E:/test/";//XML保存路径
String xmlPath = this.getClass().getClassLoader().getResource("../../").getPath().replace("api_zjg_port/", "")
+ "/zjgFile/messageXML/";//XML保存路径
String billNo = "";
String currTime = "";

// 创建根节点 并设置它的属性 ;
Element root = new Element("CAR_INFO");
// 将根节点添加到文档中;
Document Doc = new Document(root);
// 创建节点 BILL_INFO;
Element billInfoElems = new Element("BILL_INFO");
// 给 BILL_INFO 节点添加子节点并赋值;
System.out.println(resMain.toString());

String carInfo = resMain.getString("CAR_INFO");
JSONObject carInfoObj = JSONObject.parseObject(carInfo);
String billInfo = carInfoObj.getString("BILL_INFO");
JSONObject billInfoObj = JSONObject.parseObject(billInfo);
for(Entry<String, Object> entry : billInfoObj.entrySet()) {
billInfoElems.addContent(new Element(entry.getKey()).setText(billInfoObj.getString(entry.getKey())));
if(entry.getKey().equals("BILL_NO")) {
billNo = billInfoObj.getString("BILL_NO");
}
if(entry.getKey().equals("SEND_TIME")) {
currTime = billInfoObj.getString("SEND_TIME");
}
}
root.addContent(billInfoElems);

String carDetail = carInfoObj.getString("CAR_DETAIL");
JSONArray carDetailArr = JSONArray.parseArray(carDetail);
if(carDetailArr.size() > 0) {
// 创建节点 CAR_DETAIL;
for(int i = 0; i < carDetailArr.size(); i++) {
JSONObject detail = carDetailArr.getJSONObject(i);

Element carInfoElems = new Element("CAR_DETAIL");
for(Entry<String, Object> entry : detail.entrySet()) {
// 给 CAR_DETAIL 节点添加子节点并赋值;
carInfoElems.addContent(new Element(entry.getKey()).setText(detail.getString(entry.getKey())));
}
root.addContent(carInfoElems);
}
}
Calendar Cld = Calendar.getInstance();
int MI = Cld.get(Calendar.MILLISECOND);

// 输出 books.xml 文件;
// 使xml文件 缩进效果
Format format = Format.getPrettyFormat();
XMLOutputter XMLOut = new XMLOutputter(format);

System.out.println("文件名称:" + xmlPath + billNo + "-" + currTime + MI + ".xml");
XMLOut.output(Doc, new FileOutputStream(xmlPath + billNo + "-" + currTime + MI + ".xml"));
System.out.println("文件已生成");

FtpModel fm = new FtpModel();
fm.setIpAddr("192.168.1.252");
fm.setUserName("ftp");
fm.setPwd("ftp12345");
fm.setPath("/temp/zjg/messageXML/");
FtpUtil.connectFtp(fm);
File file = new File(xmlPath + billNo + "-" + currTime + MI + ".xml");
FtpUtil.upload(file);
}

public void BuildXMLDoc() throws Exception {
// 创建根节点 并设置它的属性 ;
Element root = new Element("CAR_INFO");
// 将根节点添加到文档中;
Document Doc = new Document(root);
// 创建节点 BILL_INFO;
Element billInfoElems = new Element("BILL_INFO");
// 给 BILL_INFO 节点添加子节点并赋值;
billInfoElems.addContent(new Element("BUSI_TYPE").setText("BID_A"));
billInfoElems.addContent(new Element("SHIP_NAME").setText("集装箱"));
billInfoElems.addContent(new Element("VOYAGE_NO").setText("CZ"));
billInfoElems.addContent(new Element("BILL_NO").setText("YMLUW190205735"));
billInfoElems.addContent(new Element("WHARF_NAME").setText("张家港保税港务有限公司"));
billInfoElems.addContent(new Element("SEND_TIME").setText("20170419151921"));
root.addContent(billInfoElems);

// 创建节点 CAR_DETAIL;
Element carInfoElems = new Element("CAR_DETAIL");
// 给 CAR_DETAIL 节点添加子节点并赋值;
carInfoElems.addContent(new Element("VIN_NO").setText("5TFDY5F19HX616824"));
carInfoElems.addContent(new Element("RFID").setText("888820160822000000003747"));
carInfoElems.addContent(new Element("AREA_NO").setText("A23901"));
carInfoElems.addContent(new Element("OCCUR_TIME").setText("20170419151905"));
root.addContent(carInfoElems);
// 输出 books.xml 文件;
// 使xml文件 缩进效果
Format format = Format.getPrettyFormat();
XMLOutputter XMLOut = new XMLOutputter(format);

Calendar cal = Calendar.getInstance();
Date date = cal.getTime();
SimpleDateFormat sdFormat = new SimpleDateFormat("yyyyMMddhhmmssSSS");
String myTime = sdFormat.format(date);
XMLOut.output(Doc, new FileOutputStream("E:/test/5TFDY5F19HX616824-" + myTime + ".xml"));
System.out.println("文件已生成");

FtpModel fm = new FtpModel();
fm.setIpAddr("192.168.1.252");
fm.setUserName("ftp");
fm.setPwd("ftp12345");
fm.setPath("/temp/zjg/messageXML/");
FtpUtil.connectFtp(fm);
File file = new File("E:/test/5TFDY5F19HX616824-" + myTime + ".xml");
FtpUtil.upload(file);
}

public static void main(String[] args) {
/*try {
JavaToXML j2x = new JavaToXML();
System.out.println("正在生成 xml文件...");
j2x.BuildXMLDoc();
} catch (Exception e) {
e.printStackTrace();
}*/
}
}








































































































































以上是关于java采用jdom生成xml时如何生成&,不要带有amp的主要内容,如果未能解决你的问题,请参考以下文章

java生成xml

通过java程序读mysql数据库生成xml文档

java怎么将数据导出为xml文件

Jdom 生成本地xml

Java jdom解析xml文件带冒号的属性

解析xml文件,如何动态的封装成一个java类