Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java XML-在从DOM到字符串的转换过程中防止转义_Java_Xml Parsing - Fatal编程技术网

Java XML-在从DOM到字符串的转换过程中防止转义

Java XML-在从DOM到字符串的转换过程中防止转义,java,xml-parsing,Java,Xml Parsing,在从DOM到字符串的转换过程中,我遇到了以下与转义XML内容相关的问题 存在包含Base64编码数据的XML文件: <RootElement> <SomeData /> <Target>PD94bWwgdmVyc2lvbj0iMS4wIitruncated=</Target> </RootElement> 但在转换后,我得到了解码数据: <RootElement> <SomeData />

在从DOM到字符串的转换过程中,我遇到了以下与转义XML内容相关的问题

存在包含Base64编码数据的XML文件:

<RootElement>
    <SomeData />
    <Target>PD94bWwgdmVyc2lvbj0iMS4wIitruncated=</Target>
</RootElement>
但在转换后,我得到了解码数据:

<RootElement>
  <SomeData />
  <Target>
&lt;Data&gt;
  &lt;Info&gt;Some text&lt;/Info&gt;
&lt;/Data&gt;
  </Target>
</RootElement>

数据
信息一些文本/信息
/资料

有没有办法防止在转换过程中发生这种情况?

您找到解决方案了吗?
// parse initial XML document that contains Base64-encoded data
DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = null;
docBuilder = docBuilderFactory.newDocumentBuilder();
org.w3c.dom.Document doc = docBuilder.parse(new ByteArrayInputStream((xml.getBytes())));

// create XPath expression in order to find target tag
XPathFactory xPathfactory = XPathFactory.newInstance();
XPath xpath = xPathfactory.newXPath();
XPathExpression xPathExpression = xpath.compile("RootElement/Target");

// find target node using XPath, get its content and decode it
NodeList nodes = (NodeList) xPathExpression.evaluate(doc, XPathConstants.NODESET);
Node targetNode = nodes.item(0);
String base64Content = targetNode.getTextContent();
BASE64Decoder base64Decoder = new BASE64Decoder();
byte[] decodedBytes = base64Decoder.decodeBuffer(base64Content);

// all is OK here, value is decoded correctly without escaping
String decodedContent = new String(decodedBytes);
// setting new decoded content (in XML format) to node that previously contained Base64 encoded content
targetNode.setTextContent(decodedContent); 

// transforming DOM structure to java.lang.String
TransformerFactory tf = TransformerFactory.newInstance();
Transformer transformer = tf.newTransformer();
transformer.setOutputProperty(OutputKeys.METHOD, "xml");
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
StringWriter writer = new StringWriter();
transformer.transform(new DOMSource(doc), new StreamResult(writer));

// creating String from StringWriter in order to check result
String output = writer.getBuffer().toString();
<RootElement>
  <SomeData />
  <Target>
&lt;Data&gt;
  &lt;Info&gt;Some text&lt;/Info&gt;
&lt;/Data&gt;
  </Target>
</RootElement>