You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用AEXML处理XML时如何保留CR/LF字符的字符串表示?

解决AEXML处理XML时保留
原始实体的问题

问题根源很明确:AEXML默认会自动解析XML实体(把
转成\r字符),同时规范化换行(将\r/\r\n统一转成\n),最终生成XML时把\n编码为
,导致原始的
被替换。

分两种场景给出解决方案:

场景1:解析现有XML时保留原始实体

要从已有XML里完整提取带
的内容,需要调整解析选项并手动转回实体:

  • 初始化解析器时关闭字符规范化,保留原始的\r字符:
    let parserOptions: XMLParser.Options = [
        .preserveWhitespace,
        .normalizeCharacters(false) // 禁止自动转换CR/CRLF为LF
    ]
    guard let xmlDoc = try? AEXMLDocument(xml: yourInputXML, options: parserOptions) else {
        // 处理解析失败逻辑
        return
    }
    
  • 提取内容后,把\r手动替换回
:
    let rawDigestValue = xmlDoc.root["DigestValue"].value?.replacingOccurrences(of: "\r", with: "
") ?? ""
    

场景2:生成XML时输出原始
实体

自己构建XML需要输出
时,别用默认的value属性,直接用rawValue传入原始实体字符串:

// 创建带原始实体的DigestValue元素
let digestElement = AEXMLElement(
    name: "DigestValue",
    rawValue: "MDEwDQYJYIZIAWUDBAIBBQAEINw11if3rwKZpjXua6DautZ/ciHeGATrbbGRpeoE
\n83NQ"
)
// 生成文档并输出XML
let xmlDoc = AEXMLDocument(root: digestElement)
let outputXML = xmlDoc.xml

注意:如果你的AEXML版本较旧没有rawValue参数,要么升级库,要么临时手动拼接该元素的XML片段(不推荐长期使用)。

内容的提问来源于stack exchange,提问作者desertSniper87

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 09:27:41