【发布时间】:2010-10-05 14:30:46
【问题描述】:
如何在 XML 标签中表示空格和制表符?
有什么特殊的字符可以代表它们吗?
【问题讨论】:
标签: xml tags special-characters w3c
如何在 XML 标签中表示空格和制表符?
有什么特殊的字符可以代表它们吗?
【问题讨论】:
标签: xml tags special-characters w3c
我认为您可以直接在 XML 文档中使用实际的空格或制表符,但是如果您正在寻找特殊字符来表示它们以便文本处理器不会弄乱它们,那么它是:
space =  
tab = 	
【讨论】:
为我工作
\n = 

\r = 
\t = 	
space =  
这是一个关于如何在 XML 中使用它们的示例
<KeyWord name="hello	" />
【讨论】:
对旧的常见问题的新扩展答案...
总结: 不允许在 XML 元素或属性名称中使用空格字符。
以下是与空格相关的主要 Unicode 代码点:
#x0009 字符列表#x0020空间#x000A LINE FEED (LF)#x000D回车(CR)#x00A0 无间断空间[#x2002-#x200A]EN SPACE 到 HAIR SPACE#x205F中等数学空间#x3000表意空间这些代码点中没有一个被W3C XML BNF for XML names 允许:
NameStartChar ::= ":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF] NameChar ::= NameStartChar | "-" | "." | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040] Name ::= NameStartChar (NameChar)*
总结: 空白字符是,当然,在 XML 内容中是允许的。
W3C XML BNF for Char 允许在 XML 内容中使用上述所有空白代码点:
Char ::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF] /* any Unicode character, excluding the surrogate blocks, FFFE, and FFFF. */
Unicode 代码点可以插入为character references。十进制 &#decimal; 和十六进制 &#xhex; 都支持。
&#x09; 或 &#09; CHARACTER TABULATION
&#x0A; 或 &#10; LINE FEED (LF)
&#x0D; 或 &#13; CARRIAGE RETURN (CR)
&#x20; 或 &#32; SPACE
&#xA0; 或 &#160; NO-BREAK SPACE 【讨论】:
XML 元素的标签(即名称)中不能有空格和制表符,请参阅规范:http://www.w3.org/TR/REC-xml/#NT-STag。除字母数字字符外,名称中允许使用冒号、下划线、破折号和点字符,且首字母不能是破折号或点。某些 unicode 字符也是允许的,如果不仔细检查,我会说这些是国际字母。
【讨论】:
如果您正在谈论从 属性值 中专门去除多个和非空格空白字符的问题,那么可以,将它们编码为字符引用,例如 会解决的。
【讨论】:
对我来说,为了让它工作,我需要在 CDATA xml 元素中编码空间的十六进制值,以便在解析后它加起来就像在 htm webgae 中一样,在浏览器中查看时只显示一个空格!。 (以上所有想法和答案都很有用)
<my-xml-element><![CDATA[ ]]></my-xml-element>
【讨论】:
可以使用 Unicode UCS-2 对非法 XML 标记名称字符进行编码。这非常有效。我正在使用它来创建转换为 json 的 XML(与 XPath 相比,JPath 较弱)。 注意空格、(,) 字符的处理。 Unicode UCS-2 代码表:http://www.columbia.edu/kermit/ucs2.html
tag.Name = tag.Name.Replace(" ", "_x0020_");
tag.Name = tag.Name.Replace("(", "_x0028_");
tag.Name = tag.Name.Replace(")", "_x0029_");
XML:
<Internal_x0020_Chargeback_x0020_ID>{CHARGEBACKCODE}</Internal_x0020_Chargeback_x0020_ID>
<Bill_x0020_To>{CHARGEBACKCODE}</Bill_x0020_To>
<Operator_x0020_or_x0020_Directly_x0020_Responsible_x0020_Individual_x0020__x0028_DRI_x0029_>zzz@yyy.gov</Operator_x0020_or_x0020_Directly_x0020_Responsible_x0020_Individual_x0020__x0028_DRI_x0029_>
通过 json.net 转换为 json:
"Internal Chargeback ID": "{CHARGEBACKCODE}",
"Bill To": "{CHARGEBACKCODE}",
"Operator or Directly Responsible Individual (DRI)": "xxx@yyy.gov",
【讨论】:
我遇到了同样的问题,以上答案都没有解决问题,所以我尝试了一些非常直接的方法:我刚刚输入了我的strings.xml\n\t
完整的字符串看起来像这样<string name="premium_features_listing_3">- Automatische Aktualisierung der\n\tDatenbank</string>
结果:
自动化操作
数据银行
(中间没有多余的线)
也许它会帮助别人。问候
【讨论】: