替换>,<,&出现在XML节点内的字符

时间:2010-09-15 18:33:58

标签: c# xml

Regular expression to match ">", "<", "&" chars that appear inside XML nodes

我有一个几乎同意的问题 - 但是,我正在使用C#。

我不是在争论XML的有效性。

发送的内容是我无法控制的。

输入XML:

<PNODE> 
  <CNODE>This string contains > and < and & chars.</cnode> 
</PNODE> 

我需要它看起来像这样:

<PNODE> 
  <CNODE>This string contains &gt; and &lt and &amp; chars.</CNODE> 
</PNODE> 

看起来这个人找到了PHP的解决方案 - 这对我没有帮助。

但是,我需要找到逃避&amp;,&gt;的方法。和&lt;节点内的字符,但保留标记声明。

6 个答案:

答案 0 :(得分:1)

结帐Tidy.Net。这是Tidy的.Net实现。

答案 1 :(得分:0)

答案 2 :(得分:0)

你应该看看SgmlReader:

http://developer.mindtouch.com/SgmlReader

它会给你你想要的:)我在这里使用它:http://www.xmltools.dk/HtmlToXml尝试它:)(你可以禁用html标签和uppercase-tags-&gt; lowercase-tags转换。)

答案 3 :(得分:0)

我总是只使用replace for XML(节省我必须引入HTTP库):

string output = inputXml.Replace("&", "&amp;")
                        .Replace("<", "&lt;")
                        .Replace(">", "&tg;")
                        .Replace("'", "&apos;")     // optional
                        .Replace("\"", "&Quot;")    // optional

答案 4 :(得分:0)

  

我不是在争论有效性   XML。

that other question一样,正确的答案是您发送的内容是不是 XML。这是一个结构良好的问题,而不是XML意义上的有效性问题。

  

发送的内容是我无法控制的。

这可能是真的,但是如果有人向您发送了一夸脱的机油并要求您将其转换为HTML,您还会接受它吗?通常,数据交换是基于合同(正式或非正式)完成的,互换的数据将遵循某些标准。如果不符合商定的标准,则可以发回,拒绝数据。

如果您不需要XML作为输入,那么这个问题不是关于“&lt;,&amp; charrs出现在XML节点内”。相反,它是关于解析看起来很像XML的SGML,但它具有&lt;和&amp;出现在文字内容中的字符。

要做到这一点,.NET Tidy和SGMLReader都是很好的解决方案,正如其他人所说的那样。

答案 5 :(得分:-1)

使用HTTPUtility。

HttpUtility.HtmlEncode("<text to Encode>");