微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

enter image description here

在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[
       ...

更新: 阅读评论后,我发现还有其他可能的问题。我的理解是您正在使用 Java 读取 PDF 文件并将其转换为 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")

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。