【问题标题】:How to remove xml "&" symbol如何删除xml“&”符号
【发布时间】:2012-05-18 15:24:39
【问题描述】:

我正在将 xml 文件解析到数据集。如果 xml 数据包含“&”或一些特殊字符,我会收到错误如何删除?

如何从下面的标签中删除“&”?

xml

 < department departmentid=1 name="pen & Note" >

$

string departmentpath = HostingEnvironment.MapPath("~/App_Data/Department.xml"); DataSet departmentDS = new DataSet(); System.IO.FileStream dpReadXml = new System.IO.FileStream(departmentpath, System.IO.FileMode.Open); try { departmentDS.ReadXml(dpReadXml); } catch (Exception ex) { //logg }

【问题讨论】:

  • “xml”是否来自您无法控制的来源?您显示的文本是格式错误的 xml,这是这里的根本问题。如果您需要容忍格式错误的 xml,那么您将不得不考虑转换传入的文本。这反过来又要求您调查和定义输入文本可能不符合 XML 的各种方式,以及您希望如何“纠正”这些情况。

标签: c# xml escaping xml-parsing


【解决方案1】:

你可以用&amp;amp;替换它

【讨论】:

  • 这不是推荐的方式。请参阅下面的答案,了解原因。
  • 谢谢gabizish,如何替换xml?如果我从 URL 获取 xml。
  • @laksh - 如果 XML 来自带有 &amp;amp; 符号的第三方 URL,那么您应该通知提供商他们提供的 XML 无效。同时,您可能需要对其进行一些后期处理,以自己将&amp;amp; 替换为&amp;amp;。它应该是一个相当简单的字符串替换函数来实现它,但注意不要替换其他现有的实体代码(例如&amp;amp;&amp;gt;等以&amp;amp;开头的)。
【解决方案2】:

XML 的文化是创建 XML 的人负责交付符合规范的格式良好的 XML;如果收件人弄错了,他们应该拒绝它。因此,通过尝试修复不良 XML 并将其转变为良好的 XML,您将违反规定。这就像在餐馆里吃到劣质食物:你应该抱怨,而不是问邻桌的人如何让它变得容易消化。

您提供的输入比 & 符号有更多错误。它根本无法识别为 XML。您永远不会将这种混乱变成强大的数据流。

【讨论】:

    【解决方案3】:

    代码似乎是 C#。但一定要添加正确的语言标签!

    有五个特殊字符通常需要在 XML 文档中转义。你可以阅读this SO question。

    有两种可能:

    • 让您的DataSet::ReadXML 方法处理这些特殊字符[推荐]
    • 更改输入文件中的所有特殊字符[不推荐]

    不推荐第二种方法,因为您不可能总是控制传入的数据(如果您愿意,您可能会浪费时间对它们进行预处理)。为了让ReadXML 正确解析特殊字符,您还需要在输入 XML 中定义正确的编码。

    【讨论】:

      猜你喜欢
      • 2011-01-07
      • 2021-12-31
      • 1970-01-01
      • 2018-04-27
      • 1970-01-01
      • 1970-01-01
      • 2013-09-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多