使用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
相关产品推荐
相关产品推荐

