C# 无法读取包含符号和符号的XML文档
我正在编写一个程序,用Visual C#读取XML文件。我在读取Xml文件时遇到问题,因为它包含无效的Xml符号,例如“&” 我必须阅读XML,但不能修改文档。如何使用C#修改Xml文件?到目前为止,我的代码是:C# 无法读取包含符号和符号的XML文档,c#,xml,C#,Xml,我正在编写一个程序,用Visual C#读取XML文件。我在读取Xml文件时遇到问题,因为它包含无效的Xml符号,例如“&” 我必须阅读XML,但不能修改文档。如何使用C#修改Xml文件?到目前为止,我的代码是: private void button1_Click(object sender, EventArgs e) { XmlDocument doc; doc = new XmlDocument(); doc.Load("nu
private void button1_Click(object sender, EventArgs e)
{
XmlDocument doc;
doc = new XmlDocument();
doc.Load("nuevo.xml");
XmlNodeList Xpersonas = doc.GetElementsByTagName("personas");
XmlNodeList Xlista = ((XmlElement)Xpersonas[0]).GetElementsByTagName("edad");
foreach (XmlElement nodo in Xlista)
{
string edad = nodo.GetAttribute("edad");
string nombre = nodo.InnerText;
textBox1.Text = nodo.InnerXml;
}
正如@EBrown所建议的,一种可能是读取字符串变量中的文件内容,并用propertxml
的正确表示形式替换&
符号然后解析XML结构。可能的解决方案如下所示:
var xmlContent = File.ReadAllText(@"nuevo.xml");
XmlDocument doc;
doc = new XmlDocument();
doc.LoadXml(xmlContent.Replace("&", "&"));
XmlNodeList Xpersonas = doc.GetElementsByTagName("personas");
XmlNodeList Xlista = ((XmlElement)Xpersonas[0]).GetElementsByTagName("edad");
foreach (XmlElement nodo in Xlista)
{
string edad = nodo.GetAttribute("edad");
string nombre = nodo.InnerText;
Console.WriteLine(nodo.InnerXml.Replace("&", "&"));
}
输出为:
34 & 34
如果可以使用LINQ2XML,那么解决方案会更短,并且不需要编写反向(第二次)替换,因为LINQ2XML会自动为您实现:
var xmlContent = File.ReadAllText(@"nuevo.xml");
var xmlDocument = XDocument.Parse(xmlContent.Replace("&", "&"));
var edad = xmlDocument.Root.Element("edad").Value;
Console.WriteLine(edad);
输出与上面相同。是否要使XmlDocument
对象接受无效的Xml文档?您能发布一些无效的Xml文档吗?这是XmlDocument->Pablo 34&34您能将Xml文件加载到内存中并解析出任何错误信息吗?例如,将符号(&
)转换为适当的转义序列?我只能通过Visual c修改文档。作为一名纯粹主义者,我必须警告不要用转义(&
)替换符号(&
):谁知道XML中的哪些符号已经转义,或者更糟的是:逃避其他东西。Visual c#告诉我“文件”不退出,我会怎么做?@EBrown:我同意。在这种情况下,唯一的解决方案可能是自定义XML解析器,这可能是一项繁琐的任务。@garci:我已经根据您的问题更新了答案中的代码。@garci您应该使用System.IO添加
位于.cs
文件的顶部。如果您对Visual Studio、C#或.NET还没有足够的基本了解,无法做出这样的决定,我建议您阅读一些有关它的教程: