我正在编写一个用Visual C#读取XML文件的程序。我在阅读Xml文件时遇到问题,因为它包含无效的XML符号,例如'&'。
我必须阅读XML但我无法修改文档。如何使用C#修改Xml文件?到目前为止我的代码:
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;
}
答案 0 :(得分:1)
正如@EBrown建议的那样,一种可能性是读取字符串变量中的文件内容,并用属性XML &
的正确表示替换&
符号,然后解析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);
输出与上述相同。