JAXB2 在 XML 上删除独立 = "yes"



我需要删除standalone="是";在我的XML上。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

我试过这个代码:

marshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.FALSE);            
marshaller.setProperty("com.sun.xml.internal.bind.xmlHeaders", "<?xml version="1.0" encoding="UTF-8">");

XML上的结果-重复信息:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<?xml version="1.0" encoding="UTF-8">

有人知道如何删除standalone=";是的";?

马歇尔码:

try {
JAXBContext context = JAXBContext.newInstance(DataToXML.class);
Marshaller marshaller = context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.FALSE);
marshaller.setProperty("com.sun.xml.internal.bind.xmlHeaders", "<?xml version="1.0" encoding="UTF-8">");
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
StringWriter writer = new StringWriter();
marshaller.marshal(xml, writer);
System.out.println(writer.toString());

marshaller.marshal(xml, new File("test.xml"));
} catch (JAXBException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

我的建议是不要使用这个JAXB.Fragment true。如果您的文档实际上不是一个片段,那么它可能会导致sax级别上的null指针。例如,在对象中有多个片段的情况。

首先让我们进行一些编组,您可以选择多个对象类型进行编组。但通常情况下,您可以编组到DomResult,这允许我们稍后使用转换器对其进行编辑。


马歇尔


final StringWriter writer = new StringWriter();
DOMResult destinationXml = new DOMResult();
marshaller.marshall(objectToMarshall, destinationXmlResult);

变换

TransformerFactory transformerFactory = TransformerFactory.newInstance();
// make sure you disable the external access, for security reasons..
Transformer transformer = transformerFactory.newTransformer();
transformer.setOutputProperty(OutputKeys.STANDALONE, "no");
transformer.transform(new DOMSource(xmlResult.getNode()), new StreamResult(writer));
return writer.toString();

如果转换太多,替换也会做

替换

final StringWriter writer = new StringWriter();
marshaller.marshall(object, new StreamResult(writer));
return writer.replaceAll("standalone="yes"", "")

希望这能有所帮助。

另请参阅:https://docs.oracle.com/javase/8/docs/api/javax/xml/transform/stream/StreamResult.html

以及https://jakarta.ee/specifications/xml-binding/3.0/apidocs/jakarta.xml.bind/jakarta/xml/bind/marshaller

参见:输出键

XSLT转换拯救。

可以通过<xsl:output .../>子句属性控制几乎任何XML方面。

其中之一是独立="是"或"否">

XSLT

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" standalone="no" omit-xml-declaration="no" encoding="UTF-8" indent="yes" />
<xsl:strip-space elements="*"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>

最新更新