【问题标题】:Parsing XML with Special Chars (SQL / CLR)使用特殊字符解析 XML (SQL / CLR)
【发布时间】:2015-04-27 17:25:07
【问题描述】:

我已经查看了将 XML 解析为带有特殊字符的 SQL 的大部分内容,但找不到任何不包括控制 XML 输出本身的相关内容。 我知道这样做的方法是确保所有特殊字符都被转义,我遇到的问题是我无法控制在事后生成的 XML。我可能得到的输出可能如下所示。我需要找到一种方法来替换其中的所有特殊字符,而不触及对 xml 有效的字符。这可以使用 CLR 或直接 SQL 来完成,我什至会考虑其他选项。

<?xml version="1.0" ?>
<A>
<B>this is my test <myemail@gmail.com</B>
<B>>>>this is another test<<<</B>
</A>

【问题讨论】:

  • 这不是 XML。您应该重新表述您的问题,以便清楚地知道您有一些文本,并且您需要以某种非常特殊的方式对其进行解析(规则尚未包含在帖子中)。文本使用 &lt;&gt; 的事实并不能使其成为 XML。
  • 它是一个 xml 文件的摘录。 (修改以降低数据保护风险)
  • 我不知道你为什么一直称那个文本为“XML”......无论如何,像 HtmlAgilityPack 这样的东西可能能够阅读它,但不要指望奇迹 - “garbage-in垃圾”。
  • 安德鲁,Alexei 的观点是,您所拥有的是看起来像 XML 的文本,但根据 XML 定义,它不遵循 XML 定义,因此不是 XML。

标签: c# sql-server xml clr


【解决方案1】:

您可能正在寻找类似于 HtmlEncode() 的内容。循环遍历您的 XML 结构并在写入 DB 之前对您需要的字段进行编码,并在从 DB 读取数据时执行 HtmlDecode()。

https://msdn.microsoft.com/en-us/library/w3te6wfz%28v=vs.110%29.aspx

【讨论】:

  • 我会试一试,我只是觉得任何 xmlreader 在尝试循环浏览内容时都会出错,因为从技术上讲,它不是有效的带有特殊字符的 xml。
  • 这不是“技术上”无效的 XML - 它不是 XML。您不能使用 XML 解析器来解析不是 XML 的内容。
  • 我不认为这与 OP 的问题很接近,听起来像是“将文本文件解析为 XML 树”...
  • 我已经纠正了阿列克谢。我错过了他没有控制 XML 的事实,但认为他正在自己生成 XML,并且当时需要对其进行编码。
【解决方案2】:

如果您确定 XML 元素名称有效,那么解决方案可以使用正则表达式将 XML 解析为文本,并将 & 替换为 &amp;amp;,将 > 替换为 &amp;gt;,将 &lt;。 例如,看看这里regular expression to find special character & between xml tags

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-21
    • 2012-09-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多