Java JAXB如何将XML和XML字符串附加到XML元素中?
我试图添加一个XML元素,另一个XML是字符串。当我生成的XML文件编码不正确时,问题就出现了,它使我产生了一些值< > HTMLJava JAXB如何将XML和XML字符串附加到XML元素中?,java,xml,jaxb,Java,Xml,Jaxb,我试图添加一个XML元素,另一个XML是字符串。当我生成的XML文件编码不正确时,问题就出现了,它使我产生了一些值< > HTML JAXBContext jaxbContext = JAXBContext.newInstance(ExpedienteType.class); String XMLDatosEspecificos = "<![CDATA[" + XMLDatosEspecificos + "]]>"; expedienteType.setDATOSESPECI
JAXBContext jaxbContext = JAXBContext.newInstance(ExpedienteType.class);
String XMLDatosEspecificos = "<![CDATA[" + XMLDatosEspecificos + "]]>";
expedienteType.setDATOSESPECIFICOS(XMLDatosEspecificos);
Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,true);
marshaller.setProperty(Marshaller.JAXB_ENCODING,"UTF-8");
JAXBElement<ExpedienteType> jaxbElement = new JAXBElement<ExpedienteType>(
new QName("", "Expediente"), ExpedienteType.class, expedienteType);
ByteArrayOutputStream os = new ByteArrayOutputStream();
marshaller.marshal(jaxbElement, os);
File f = new File("file.xml");
f.createNewFile();
FileOutputStream fos = new FileOutputStream(f);
fos.write(os.toByteArray());
os.close();
fos.close();
JAXBContext-JAXBContext=JAXBContext.newInstance(便利类型.class);
字符串xmldataosecificos=“”;
便利类型。SetDatosSpecifics(XMLDatosSpecifics);
Marshaller=jaxbContext.createMarshaller();
setProperty(marshaller.JAXB_格式化的_输出,true);
setProperty(marshaller.JAXB_编码,“UTF-8”);
JAXBElement=new JAXBElement(
新的QName(“,”方便“),方便类型.class,方便类型);
ByteArrayOutputStream os=新建ByteArrayOutputStream();
marshaller.marshall(jaxbElement,os);
文件f=新文件(“File.xml”);
f、 createNewFile();
FileOutputStream fos=新的FileOutputStream(f);
fos.write(os.toByteArray());
os.close();
fos.close();
这里是XML的结果
<DATOS_ESPECIFICOS><![CDATA[<nombre>pepito</nombre><apellidos>grillo</apellidos>]]>;</DATOS_ESPECIFICOS>
![CDATA[nombrepepito/NombrePellidosGrillo/apellidos]>;
我将得到的结果是
<DATOS_ESPECIFICOS><![CDATA[<nombre>pepito</nombre><apellidos>grillo</apellidos>]]></DATOS_ESPECIFICOS>
pepitogrillo]>
详细说明我的注释-默认情况下,JAXB是您在元素上设置的任何文本
您可以使用中描述的解决方案之一禁用转义
然而,我发现您真正需要的只是在CDATA区域中输入文本。这可以使用这里描述的解决方案之一来实现:详细说明我的注释-默认情况下,JAXB是您在元素上设置的任何文本 您可以使用中描述的解决方案之一禁用转义
然而,我发现您真正需要的只是在CDATA区域中输入文本。这可以使用此处描述的解决方案之一实现:最好的解决方案是我实现的解决方案。还有更多的方法可以创建一个处理程序,该处理程序在不做任何更改的情况下编写所有发生的事情,以便在不更改任何字符的情况下编写文本
import java.io.IOException;
import java.io.Writer;
import com.sun.xml.bind.marshaller.CharacterEscapeHandler;
public class MyEscapeHandler implements CharacterEscapeHandler {
@Override
public void escape(char[] ch, int start, int length, boolean isAttVal,
Writer out) throws IOException {
out.write(ch, start, length);
}
}
在实现XML创建的类中添加了它
JAXBContext jaxbContext = JAXBContext
.newInstance(ExpedienteType.class);
Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,
true);
marshaller.setProperty(Marshaller.JAXB_ENCODING,
"ISO-8859-1");
StringBuffer strBuff = new StringBuffer("");
strBuff.append("PLAT2_");
strBuff.append(expedienteType.getNEXPEDIENTE().replace("/", "_"));
CharacterEscapeHandler escapeHandler = new MyEscapeHandler();
marshaller.setProperty("com.sun.xml.bind.characterEscapeHandler", escapeHandler);
JAXBElement<ExpedienteType> jaxbElement = new JAXBElement<ExpedienteType>(
new QName("", "Expediente"), ExpedienteType.class,
expedienteType);
ByteArrayOutputStream os = new ByteArrayOutputStream();
marshaller.marshal(jaxbElement, os);
JAXBContext JAXBContext=JAXBContext
.newInstance(便利类型.class);
Marshaller=jaxbContext.createMarshaller();
setProperty(marshaller.JAXB_格式化的_输出,
正确的);
setProperty(marshaller.JAXB_编码,
“ISO-8859-1”);
StringBuffer strBuff=新的StringBuffer(“”);
strBuff.append(“平台2”);
strBuff.append(便利类型.getNEXPEDIENTE().replace(“/”,“”);
CharacterEscapeHandler escapeHandler=新的MyEscapeHandler();
setProperty(“com.sun.xml.bind.characterEscapeHandler”,escapeHandler);
JAXBElement=new JAXBElement(
新QName(“,”方便“),方便类型.class,
(四种类型);
ByteArrayOutputStream os=新建ByteArrayOutputStream();
marshaller.marshall(jaxbElement,os);
最终的XML是完美创建的
<DATOS_ESPECIFICOS><![CDATA[<nombre>pepito</nombre><apellidos>grillo</apellidos>]]></DATOS_ESPECIFICOS>
pepitogrillo]>
最好的解决方案是我实施的解决方案。还有更多的方法可以创建一个处理程序,该处理程序在不做任何更改的情况下编写所有发生的事情,以便在不更改任何字符的情况下编写文本
import java.io.IOException;
import java.io.Writer;
import com.sun.xml.bind.marshaller.CharacterEscapeHandler;
public class MyEscapeHandler implements CharacterEscapeHandler {
@Override
public void escape(char[] ch, int start, int length, boolean isAttVal,
Writer out) throws IOException {
out.write(ch, start, length);
}
}
在实现XML创建的类中添加了它
JAXBContext jaxbContext = JAXBContext
.newInstance(ExpedienteType.class);
Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,
true);
marshaller.setProperty(Marshaller.JAXB_ENCODING,
"ISO-8859-1");
StringBuffer strBuff = new StringBuffer("");
strBuff.append("PLAT2_");
strBuff.append(expedienteType.getNEXPEDIENTE().replace("/", "_"));
CharacterEscapeHandler escapeHandler = new MyEscapeHandler();
marshaller.setProperty("com.sun.xml.bind.characterEscapeHandler", escapeHandler);
JAXBElement<ExpedienteType> jaxbElement = new JAXBElement<ExpedienteType>(
new QName("", "Expediente"), ExpedienteType.class,
expedienteType);
ByteArrayOutputStream os = new ByteArrayOutputStream();
marshaller.marshal(jaxbElement, os);
JAXBContext JAXBContext=JAXBContext
.newInstance(便利类型.class);
Marshaller=jaxbContext.createMarshaller();
setProperty(marshaller.JAXB_格式化的_输出,
正确的);
setProperty(marshaller.JAXB_编码,
“ISO-8859-1”);
StringBuffer strBuff=新的StringBuffer(“”);
strBuff.append(“平台2”);
strBuff.append(便利类型.getNEXPEDIENTE().replace(“/”,“”);
CharacterEscapeHandler escapeHandler=新的MyEscapeHandler();
setProperty(“com.sun.xml.bind.characterEscapeHandler”,escapeHandler);
JAXBElement=new JAXBElement(
新QName(“,”方便“),方便类型.class,
(四种类型);
ByteArrayOutputStream os=新建ByteArrayOutputStream();
marshaller.marshall(jaxbElement,os);
最终的XML是完美创建的
<DATOS_ESPECIFICOS><![CDATA[<nombre>pepito</nombre><apellidos>grillo</apellidos>]]></DATOS_ESPECIFICOS>
pepitogrillo]>
要生成CDATA数据块,请参阅要生成CDATA数据块,请参阅要生成CDATA数据块,请参阅