新闻中心

在进行XML转换时,如何保持源文档中的空白和格式?

2025-12-05
浏览次数:
返回列表
要保持XML转换时的空白字符,需在解析、处理和输出三环节主动配置:首先设置解析器保留空白节点,如DOM中setIgnoringElementContentWhitespace(false);其次在XSLT中使用xsl:preserve-space声明需保留空白的元素,避免xsl:strip-space;最后通过xsl:output设置indent="no"防止输出重排,并用xsl:copy-of或xsl:text精确控制文本节点输出,避免normalize-space等函数破坏原始格式。

在进行xml转换时,如何保持源文档中的空白和格式?

XML转换时默认会忽略大部分空白字符,要保持源文档中的空白和格式,关键在于控制解析器行为和XSLT处理逻辑。

设置解析器保留空白节点

大多数XML解析器(如J*a的DOM、SAX,或.NET的XmlDocument)默认会丢弃“无关空白”(即元素间用于缩进和换行的空格、制表符、回车)。需显式启用保留:

  • DOM解析器中调用 setIgnoringElementContentWhitespace(false)(J*a)或确保 XmlReaderSettings.IgnoreWhitespace = false(.NET)
  • 使用SAX时,重写 ignorableWhitespace() 方法,而非只处理 characters()
  • 对于Python的lxml,创建解析器时传入 remove_blank_text=False

在XSLT中声明保留空白的元素

XSLT本身不自动保留所有空白,但可通过 xsl:preserve-space 明确指定哪些元素的内容应保留空白:

  • 在样式表顶部添加:(适用于含格式化文本的元素)
  • 避免使用 xsl:strip-space(除非你明确想清除某些元素的空白)
  • 若需全局保留(谨慎使用),可写 ,但会影响性能且可能干扰逻辑处理

输出时控制缩进与换行

即使输入空白被保留,XSLT处理器默认输出仍可能重新格式化。需配置输出方法:

拾贝 拾贝

一键同步微信读书所有笔记和划线,并在新标签页回顾

拾贝 186 查看详情 拾贝
  • 在XSLT中添加:(禁用自动缩进)
  • 若需部分缩进但保留原始结构,改用 indent="yes" 并配合 disable-output-escaping="yes" 处理特定文本节点
  • 使用 包裹需要原样输出的换行或空格,例如:

处理文本节点时避免隐式规范化

XSLT中直接用 会合并并截断空白;应改用更精确的方式:

  • 复制原始文本节点(包括空格、换行)
  • 对混合内容(如段落内有标签和文本),用 apply-templates> 配合模板匹配 text() 节点,并关闭 normalize-space()
  • 避免在XPath中无意识使用 normalize-space(@attr)string(.) —— 它们会破坏原始空白

基本上就这些。核心是分清“输入保留”“处理不破坏”“输出不重排”三个环节,每步都需主动配置,不能依赖默认行为。

以上就是在进行XML转换时,如何保持源文档中的空白和格式?的详细内容,更多请关注其它相关文章!


# 如何用  # 西安短视频seo排名  # 长春seo外包哪家好  # 莱州seo优化推广营销  # 广汉网站建设优化  # 宝鸡seo排名合作商家  # 网站工具推广有哪些方法  # 营销推广主题公园  # 关键词排名软件询问l火28星  # 山西营销推广哪家好做点  # 关键词十佳歌手排名表格  # 若需  # 它比  # python  # 如何使用  # 样式表  # 文档  # 拾贝  # 换行  # 如何将  # 转换为  # .net  # xml解析  # app  # 处理器  # java 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: 谷歌google账号注册详细步骤 谷歌账号注册官方教程  c++中的std::launder有什么实际用途_c++对象生命周期与指针优化  qq游戏大厅官方下载_qq游戏免费下载安装入口  在J*a中如何捕获IndexOutOfBoundsException_索引越界异常防护方法说明  QQ邮箱在线使用入口 QQ邮箱个人账号网页版登录  J*aScript中正确使用querySelectorAll与复杂CSS选择器  mcjs网页版流畅运行 mcjs低配电脑畅玩入口  QQ邮箱网页版快速登录 QQ邮箱邮箱账号官方入口地址  文心一言怎样用批量生成做多版文案_文心一言用批量生成做多版文案【批量创作】  腾讯QQ邮箱官方网站_QQ邮箱网页版在线登录  Bing引擎入口最新2025 Bing搜索免费官方登录  J*aScript中安全有效地处理localStorage字符串数据  Lar*el如何正确地在控制器和模型之间分配逻辑_Lar*el代码职责分离与架构建议  必由学官网快捷入口 必由学网页版在线学习平台  C++20的source_location是什么_C++在编译期获取源码位置信息用于日志和断言  uc浏览器网页版入口 uc浏览器网页版最新网址  CSS响应式网页如何实现主次模块比例自适应_flex-grow与flex-shrink调整  向日葵客户端怎么进行远程CentOS控制_向日葵客户端远程CentOS控制操作教程  必由学网页版入口 必由学官方平台直接访问  Python自定义类排序:解决lambda键值访问TypeError的实践指南  CSS Grid如何控制元素对齐_align-items与justify-items组合使用  Yandex浏览器官方网页版入口 Yandex浏览器最新版官网  在J*a中如何开发简易博客标签推荐系统_博客标签推荐项目实战解析  深入理解与实现最大堆的Heapify过程:常见错误与修正  迅雷下载到U盘速度很慢怎么办_迅雷U盘下载慢优化方法  知音漫客官网漫画下载_知音漫客网页版阅读记录  C++如何解决segmentation fault_C++段错误调试与原因分析  微信客户端如何收红包_微信客户端接收红包使用教程  包子漫画官方网站在线链接-包子漫画在线阅读平台主页地址  微信网页版登录教程_微信网页版登录入口在哪  内存检查:在VS Code中调试C++时的内存视图  魅族20怎样在浏览器开无图省流_iPhone魅族20浏览器开无图省流【流量节省】  J*aScript:在map操作中高效处理空数组  QQ邮箱官网登录入口 QQ邮箱网页版邮箱快速登录  京东京造J1和网易云音乐氧气真无线有什么不同_国产电商蓝牙耳机音质对比  如何创建独立于主系统的J*a运行环境_隔离式环境搭建策略  抖音网页版企业服务中心登录入口_抖音网页版企业登录平台  PPT平滑切换怎么做 PPT炫酷“平滑”切换动画制作教程【必学】  Node.js 中使用 node-cron 实现定时 API 数据抓取与处理  c++中的const_cast和reinterpret_cast怎么用_c++四种类型转换  苹果手机如何防止被恶意App追踪  C++如何连接MySQL数据库_C++使用Connector/C++操作MySQL数据库教程  电脑屏幕颜色不舒服怎么办_Windows夜间模式与色彩校准教程【护眼技巧】  蛙漫正版漫画平台入口_蛙漫免费阅读全站漫画资源  在Pyomo中实现基于变量的条件约束:Big-M方法详解  MAC如何安全彻底地删除文件_MAC使用终端命令确保文件无法被恢复  QQ邮箱官方邮箱登录入口 QQ邮箱网页版快速访问  QQ邮箱官方网页版登录 QQ邮箱个人邮箱快速访问  高德地图总提示网络异常怎么办 高德地图离线导航设置与网络排查方法  谷歌推RCS信息存档功能:公司可监控员工私密信息! 

搜索