我有这样的绳子
"<root><text>My test is > & < </text></root>"
实际上这是正确的xml,除了&<>;符号。
我需要将其转换为<;根>&书信电报;文本>;我的测试是&;gt&;amp&;lt</文本></根>代码>,然后用XElement进行转换。解析(str);
如何进行此转换?
我有这样的绳子
"<root><text>My test is > & < </text></root>"
实际上这是正确的xml,除了&<>;符号。
我需要将其转换为<;根>&书信电报;文本>;我的测试是&;gt&;amp&;lt</文本></根>代码>,然后用XElement进行转换。解析(str);
如何进行此转换?
这几乎是不可能可靠实现的。你应该从源头上纠正这个问题。如果您控制插入“我的测试是>;&;<;”字符串的系统,则应在插入该字符串之前对其进行转义。<code>HttpUtility。HtmlEncode是一种合理的方法。
如果使用new XElement
而不是XElement,XElement将自动转义文本。解析()
:
LINQPad片段:
var str = "<root><text>My test is > & < </text></root>";
var element = new XElement("element", str);
element.Dump();
输出
<element><root><text>My test is > & < </text></root></element>
edit:我重读了这个问题,并意识到这并不能产生所需的输出。
您遇到的问题是,传入的XML字符串根本无效。如果你能控制源,那么你应该在那里修复它。如果没有,就没有简单的方法来解决它。
不要用用户文本替换变量(这是XML注入错误,不安全)。用转义文本替换它们。这里有一个XML转义函数:http://msdn.microsoft.com/en-us/library/system.security.securityelement.escape%28VS.80%29.aspx一
这就像你用HTML做的一样。
这是“除了xyz之外的XML”的想法可能需要更仔细地研究。为了正确地解决这个问题,您需要为您称之为“除xyz之外的XML”的语言定义一个语法,然后您需要编写一个解析器来分析符合该语法的文档;该解析器的输出可以是输入的XML表示。这一切都是可行的。不容易,但可行。当然,使用像XML这样的标准的好处是,您可以获得现成的解析器,而如果您发明了自己的语法,则必须编写自己的解析器。
为您的语言编写一个好的解析器是非常耗时的,尤其是因为需要大量的测试。编写一个测试糟糕的糟糕解析器可能很容易,而这正是许多糟糕的程序员所要做的。在这种情况下,一个好的软件工程师会意识到遵守标准的好处。
What is the use of default keyword in C#? Is it introduced in C# 3.0 ?
I m the only developer in my company, and am getting along well as an autodidact, but I know I m missing out on the education one gets from working with and having code reviewed by more senior devs. ...
I m pretty new to the Objective-C world and I have a long history with .net/C# so naturally I m inclined to use my C# wits. Now here s the question: I feel really inclined to create some type of ...
I cannot figure out how to marshal a C++ CBitmap to a C# Bitmap or Image class. My import looks like this: [DllImport(@"test.dll", CharSet = CharSet.Unicode)] public static extern IntPtr ...
I have two EF entities. One has a property called HouseNumber. The other has two properties, one called StartHouseNumber and one called EndHouseNumber. I want to create a many to many association ...
How to user GhostScript DLL to convert PDF to PDF/A. I know I kind of have to call the exported function of gsdll32.dll whose name is gsapi_init_with_args, but how do i pass the right arguments? BTW, ...
Since I cannot order my dictionary, what is the best way of going about taking key value pairs and also maintaing an index?
Maybe it s something I m doing wrong. I m just learning Linq because I m bored. And so far so good. I made a little program and it basically just outputs all matches (foreach) into a label control. ...