【问题标题】:Represent C:\Program Files in XML用 XML 表示 C:\Program Files
【发布时间】:2012-06-13 19:49:21
【问题描述】:

在我的 XML 文件中,我尝试使用文件路径;开头是这样的:

<value key="myPath"><![CDATA[C:\Program Files\myFile.exe]]>

然后,当我启动我的应用程序时,它总是说,找不到文件:

找不到文件 C:\Program

所以,显然它仍然被困在 Program 和 Files 之间的空间中。我以为我的 CDATA 会解决这个问题。

我错了?

【问题讨论】:

  • 不是 xml、cdata 或否,而是您的程序对空间处理不当。 cdata 只是一种不需要转义 & 的便捷方式
  • CDATA(或 XML)与您的问题无关。是您的程序没有正确处理实际值。
  • 你们是对的,是解析器搞砸了。感谢所有的cmets。

标签: xml error-handling path escaping cdata


【解决方案1】:

如果我正在设计这个应用程序,我会存储 URI 而不是文件名。在通常使用 XML 的世界中,这似乎是正确的方法。当然,您可以在 XML 中存储您喜欢的任何内容,如果需要存储 Windows 文件名,那么欢迎您这样做。

它不起作用的事实与 XML 无关。正在从 XML 中提取文件名并尝试打开文件的接收应用程序做错了:它要么弄乱了文件名本身,要么将其传递给无法处理包含空格的文件名的 API。

【讨论】:

    【解决方案2】:

    尝试在路径周围放置双引号。

    <value key="myPath"><![CDATA["C:\Program Files\myFile.exe"]]>
    

    您可能也不需要使用 CDATA,以防您想进一步清理它。

    【讨论】:

      【解决方案3】:

      这可能不是 XML,它可能是您的应用在空格后终止。

      几种可能性

      • 将路径用引号“”括起来
      • 转义空格 C:\Program\ Files
      • URL 编码从空格到 %20 的空格

      如果没有更多关于如何执行 XML 的信息,很难说。

      【讨论】:

        【解决方案4】:

        默认情况下,XML 不会混淆您的空格。它也不关心文件扩展名之前的退格、冒号或点。实际上,大多数有效路径字符也是有效的 XML 字符。 (我认为它们实际上都是有效的 XML 文本节点内容。)

        问题肯定出在 XML 处理上,而不是 XML 内容上。

        【讨论】:

          【解决方案5】:

          您可以使用&amp;quote;Path%quote; 技术。很脏,但工作正常,

          【讨论】:

            猜你喜欢
            • 2017-02-01
            • 2023-04-04
            • 1970-01-01
            • 2018-12-20
            • 2015-02-03
            • 2015-11-15
            • 1970-01-01
            • 2010-11-05
            • 2021-05-31
            相关资源
            最近更新 更多