如何在XML元素名称末尾添加或保留尾随空格?
XML属性值末尾空格保留解决方案
针对你遇到的XML解析时属性值末尾空格被修剪的问题,给出以下几个可行的解决思路:
1. 检查XML Schema/DTD的属性类型定义
如果你的XML关联了Schema(XSD)或DTD文件,确认reas_grp_desc_1的属性类型是否为CDATA:
- 如果属性被定义为
NMTOKEN、ID、ENTITY等非CDATA类型,XML解析器会自动修剪属性值的首尾空白,此时需要将属性类型修改为CDATA,解析器就会保留原始的空白字符。
2. 配置XML解析器的空白保留规则
部分XML解析器支持关闭自动修剪空白的行为:
- Java环境中,可通过
DocumentBuilderFactory.setIgnoringElementContentWhitespace(false)关闭元素内容空白忽略(注意需配合CDATA属性类型确保属性值空白保留); - C#环境中,设置
XmlReaderSettings.IgnoreWhitespace = false,让解析器不自动处理属性值的空白字符。
3. 使用XML不规范化的Unicode空白字符
普通空格( )和非换行空格( )可能被解析器或后续程序识别为可修剪的空白,尝试使用以下Unicode空白变体,它们视觉上与普通空格一致,但不会被XML自动规范化:
- Ogham空格标记:
  - En空格:
  - Em空格:
 
示例代码:
<default_reason reas_grp_desc_1="Filler " reas_grp_desc_2="Filler - Electrical" reas_desc="Aseptic chamber unsterile" last_edit_comment="" />
4. 调整XML结构,用CDATA包裹元素内容
如果允许修改XML结构,可将需要保留空格的属性转为子元素,并用CDATA包裹内容,确保空白完全保留:
<raw_reason raw_reas_cd="FLR0002" prompt="False" priority="1000" min_time_before_activation="00:00:00" last_edit_comment="" description=""> <expression><![CDATA[MyContainer.PLC.Machine.State ==50002]]></expression> <default_reason> <reas_grp_desc_1><![CDATA[Filler ]]></reas_grp_desc_1> <reas_grp_desc_2>Filler - Electrical</reas_grp_desc_2> <reas_desc>Aseptic chamber unsterile</reas_desc> <last_edit_comment></last_edit_comment> </default_reason> </raw_reason>
CDATA段会完整保留内部所有字符,不受XML解析器的空白规范化规则影响。
内容的提问来源于stack exchange,提问作者queryDotNet
相关产品推荐
相关产品推荐

