解析XML文档以获取c#代码

时间:2014-10-22 00:01:46

标签: c# xml parsing

我有一个XML文档,其中包含一个子节点中的一些c#代码。 c#代码:

for (int i = 0; i <= 20; i++) { }

现在这个c#代码由于'='字符而导致XML解析错误。我可以将其替换为xml特殊字符(&amp;#..),但是当使用我的eval函数调试时,我的c#代码将无法正常运行(获取字符串并在流上执行它)。如何在我的xml文件中允许c#代码而不会导致xml解析错误,同时仍然能够解析正常工作的c#代码?

PS。我不是XML专家所以如果问题与xml有关,这个问题可能很容易。

3 个答案:

答案 0 :(得分:1)

当你说

  

我可以将其替换为xml特殊字符(&amp;#..),但随后我的c#代码将无法正常运行

然后我认为你误解了编码。假设你没有包含在<!CDATA[ ]]>中,那么是的,你应该编码诸如&lt;之前的字符。到&gt;插入文本(或您的案例中的代码)时。但是,这并不意味着当你解析&#34;回到内容,你会看到&amp; gt;标志。将数据写入xml节点时,它会被编码。当你解析&#34;它回来了,内容再次被解码,你得到原始文本。

这假设您正在使用标准的xml解析器,我强烈建议。

答案 1 :(得分:0)

在XML中,有一些方法可以转义特殊字符,否则会破坏文档(例如&lt;和=)。

在这种情况下,您最好的选择是做这样的事情:

<?xml version="1.0" encoding="utf-8" ?>
<root>
  <code>
    <![CDATA[
      for (int i = 0; i <= 20; i++) { }
    ]]>
  </code>
</root>

您可以在&lt;![CDATA [...]]&gt;内放置任何内容阻止(除了]]&gt;),它不会破坏XML文档。

答案 2 :(得分:0)

您可以使用CDATA部分或编码字符。这并不重要,因为C#具有以任何方式解析XML的类,并为您提供解码后的字符串。

这是如何在C#中的XmlDocument中生成CDATA部分的粗略示例:

var xmlDocument = new System.Xml.XmlDocument();
xmlDocument.LoadXml("<xml></xml>");
var xmlCDataSection = xmlDocument.CreateCDataSection("for (int i = 0; i <= 20; i++) { }");
var root = xmlDocument.DocumentElement;
root.AppendChild(xmlCDataSection);
xmlDocument.Save("d:\\example.xml");

结果

<xml><![CDATA[for (int i = 0; i <= 20; i++) { }]]></xml>

如果XML不需要是人类可读的,那么可以不使用CDATA部分,在这种情况下,XmlDoucment将对字符进行编码,并在您重新读取XML时解码它们。 / p>

var xmlDocument = new System.Xml.XmlDocument();
var xmlElement = xmlDocument.CreateElement("xml");
xmlElement.InnerText = "for (int i = 0; i <= 20; i++) { }";
xmlDocument.AppendChild(xmlElement);
xmlDocument.Save("d:\\example.xml");

结果

<xml>for (int i = 0; i &lt;= 20; i++) { }</xml>