如何将 xml 中的编码文档字符转换为文本?

How to transform encoded document characters coming in xml into text?

我有一项服务可以返回一些详细信息以及 PDF 文档。 pdf 文档带有编码字符,如下所示。我正在使用写函数在 JSON 中发送整个 XML。但是当我尝试不使用那些编码的 PDF 部分时,它工作正常。但是当我添加编码部分时,转换失败。我该如何处理?我认为这可能与编码有关。

在 java 中,我能够从如下文档部分制作 PDF 文档

String pdfData = documentNode.getTextContent();
File file = new File("C:/Test");
FileOutputStream fos = new FileOutputStream(file);
fos.write(Base64.decodeBase64(pdfData.getBytes()));
fos.flush();

没有 CDATA 部分,这就是我所期待的。我无法在输出中添加 CDATA 部分

<DRIVEResponse>
<Loan LoanNumber="12345678" DRIVEScore="0" TimeZone="EST" >
</Loan>
</DRIVEResponse>

%dw 2.0
output application/json
---
write(payload, 'application/xml')

输出

 "<?xml version='1.0' encoding='UTF-8'?>\n<DRIVEResponse>\n  <Loan 
  LoanNumber=\"12345678\" DRIVEScore=\"0\" 
  TimeZone=\"EST\"/>\n</DRIVEResponse>"

问题似乎是 XML CDATA 部分格式不正确。请注意 CDATA 开始定界符最后一个括号如何在单独的行中:

       <![CDATA
       [...

XML specification中是一个单令牌'<![CDATA['

DataWeave 游乐场,将其分开写入会导致该错误。只需同时使用 CDATA 定界符即可解决问题,除非文档的另一部分存在其他问题:

       <![CDATA[
       ...

更新: 阅读评论后,我发现还有其他可能的问题。我的理解是,您正在读取 PDF 文件并将其转换为 Java 中的 base64,然后尝试将其作为 CDATA 添加到 XML 输出中。我在那里看到了一些问题。

首先,如果 PDF 是二进制文件,使用 Java 字符串可能会导致编码问题并损坏文件。您应该改用字节数组 (byte[])。 其次,不清楚您是如何添加 CDATA 部分的。根据错误,我假设只是连接字符串。

DataWeave 提供了将二进制数据编码为 base64 和生成 CDATA 部分的功能,以更简单和更安全的方式。

示例:

%dw 2.0
output application/json
import toBase64 from dw::core::Binaries

var binaryPdfData="FILE READ FROM FILESYSTEM" as Binary // this is usually a binary payload read from the File connector. As an example I am converting a string to binary
var base64PdfData=toBase64(binaryPdfData)
var outputTemplate=    { 
        DRIVEResponse: {
            Loan @(Number: "12345678", DRIVEScore:"0", TimeZone:"EST"): {
                Document @(fileType: "pdf"): base64PdfData as CData

            
            }
        }
    }
---
write(outputTemplate, "application/xml")