【问题标题】:XML: Invalid characters inside KEYXML:KEY 中的字符无效
【发布时间】:2013-11-15 09:32:22
【问题描述】:

我正在读取一些参数并用它们生成一个 XML 文件。我已经阅读了很多关于应该转义的特殊字符,特别是我有一个函数可以转义 XML 文件中 VALUE 的所有字符(当不使用 CDATA 时):

& ==> &
< ==> &lt;
> ==> &gt;
" ==> &quot;
' ==> &apos;

在我的具体情况下,只有一种情况是用户可以输入 KEY 的值,问题是,这些字符是否应该在这里无效(甚至转义)? 例如,用户介绍:key =&gt; ipaddress&gt; value=&gt; 192.168.1.25 哪个是有效的选项:

<ipaddress>>192.168.1.25</ipaddress>>
or <ipaddress&gt;>192.168.1.25</ipaddress&gt;>
or should the ">" character be omitted for the final string?

【问题讨论】:

  • 如果您正在连接字符串,那么您不是在构建 XML 文档。使用适当的 API。
  • @Tomalak 感谢您的回答。我知道你的意思,但在这种情况下我别无选择。这个问题更“理论上”,我想知道在 KEY 中应该避免哪些字符以确保“有效”的 XML 结构。

标签: xml invalid-characters


【解决方案1】:

这些都不行,使用固定的元素名称并将键作为属性会更安全:

<entry key="ipaddress&gt;">192.168.1.25</entry>

我强烈建议您使用适当的 XML 感知 API 来编写 XML 文件,它会自动为您处理任何必要的转义。

【讨论】:

  • 感谢您的回答。那么之前发布的 5 个字符中的任何一个在 XML 标记中的 KEY 内都是合法的,这是否正确?当然,最好的方法是使用适当的 API,因为目前还不可能,我想知道我应该考虑的所有可能的问题,以避免格式良好的 XML 文档出现格式问题。
  • @estradjs 元素名称中允许的规则可以在the XML spec 中找到。对于英语,它本质上是字母、数字、连字符、点和下划线,但第一个字符必须是字母或下划线。此外,冒号对命名空间有特殊含义,不应用于任何其他目的。相反,属性 values 几乎允许除控制字符之外的任何内容(尽管可能需要进行一些转义)。
  • @estradjs ...如果您使用适当的 API,将为您处理转义。你真的确定你“别无选择”吗?现在几乎所有的编程语言都支持 XML,通常你会有几个 API 可供选择。
  • 感谢您的链接,这是检查我的选项的好方法。关于 XML API,不可能主要用于环境,它是我试图配置一些服务的硬件设备。这里允许的语言是 TCL,我需要在没有任何库的情况下运行它,而是使用标准语言。
猜你喜欢
  • 1970-01-01
  • 2021-09-02
  • 2017-02-02
  • 2021-07-22
  • 2013-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多