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 > and < and & chars.</CNODE>
</PNODE>
看起来这个人找到了PHP的解决方案 - 这对我没有帮助。
但是,我需要找到逃避&amp;,&gt;的方法。和&lt;节点内的字符,但保留标记声明。
答案 0 :(得分:1)
结帐Tidy.Net。这是Tidy的.Net实现。
答案 1 :(得分:0)
整齐的图书馆周围有几个.Net包装。
http://users.rcn.com/creitzel/tidy.html#dotnet
答案 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("&", "&")
.Replace("<", "<")
.Replace(">", "&tg;")
.Replace("'", "'") // 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>");