【问题标题】:Using special characters in XML documents在 XML 文档中使用特殊字符
【发布时间】:2009-04-30 02:41:02
【问题描述】:

我想知道如何使用字符"
" (LINE FEED) 来分隔属性中的一些信息。看下面的例子:

<element attrinfo="info1=109&#xA;info2=108&#xA;info3=107" />

我使用SetAttribute()来设置属性的文本,但是当我保存XML时,attrinfo中的信息看起来像这样:

<element attrinfo="info1=109&amp;#xA;info2=108&amp;#xA;info3=107" />

"&amp;" 是一个特殊字符,因此 XML 将其替换为 "&amp;amp;"

我该如何解决这个问题?我看到了一些关于使用实体引用的东西,但我不明白如何使用它。

这是我使用\n的代码:

ls_DadosAdicionais = "volume=1800;peso=78;altura=157"
ll_pos = POS( ls_DadosAdicionais, ";" ) 
DO
    ls_DadosAdicionais = REPLACE( ls_DadosAdicionais, ll_pos, 1, '~n' )
    ll_pos = POS( ls_DadosAdicionais, ";", ll_pos + 1 )
LOOP WHILE ll_pos > 0
lo_exm = io_xml.createElement( "exame")
lo_exm.SetAttribute( "dados_adicionais", ls_DadosAdicionais )

【问题讨论】:

  • 你能把它产生的实际输出贴出来吗? (并删除包含代码的 cmets)。如果您在输出中看到实际的新行而不是“ ”,那么您使用的 API 存在错误。您可能必须使用另一个分隔符字符(为什么不保留分号?)。顺便说一句...那是什么语言?

标签: xml


【解决方案1】:

您应该将实际的换行符保存到属性中。转义由 API 处理。

换句话说:如果您保存字符串"&amp;#xA;",API 会正确地将其转义为"&amp;amp;#xA;",以便您在再次读取数据时返回字符串"&amp;#xA;"。始终存储您要存储的数据,切勿进行任何手动转义。

【讨论】:

    【解决方案2】:

    SetAttributes 自动进行实体翻译。不要手动替换换行符。只需在传递给 SetAttribute 的字符串中包含 \n。保存时它应该被翻译成正确的实体。

    【讨论】:

    • 我在字符串中包含了 \n 但没有用。当我在记事本++中打开xml时,我看到的是换行符而不是字符串“ ”。
    • Notepad++ 太棒了,无法显示实体。它把它翻译回来。在普通记事本中打开。
    • 我用普通的记事本打开,也是一样。看看它是如何出现的:
    • 我用普通的记事本打开,也是一样。看看它是如何出现的:
    • 对不起,它在这里不起作用,但它会出现在一个新行中,每个 INFO 属性的信息,而不是像我上次评论中那样的空格。
    猜你喜欢
    • 1970-01-01
    • 2017-05-21
    • 1970-01-01
    • 2014-04-06
    • 2017-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-26
    相关资源
    最近更新 更多