使用c#编辑xml文件,获取错误无效令牌

时间:2014-04-26 09:29:09

标签: xml c#-4.0 namespaces xml-namespaces

我的问题是我的XML文件有两个命名空间,所以我无法在SelectingNode方法中更改xml的文本

XmlTextReader reader = new XmlTextReader("C:\\test.xml");
                    XmlDocument doc = new XmlDocument();
                    doc.Load(reader); //Assuming reader is your XmlReader
                    XmlNamespaceManager oManager = new XmlNamespaceManager(doc.NameTable);
                    oManager.AddNamespace("ns", "http://schemas.microsoft.com//sqlserver//reporting//2005/01//reportdefinition");
                    oManager.AddNamespace("rd", "http://schemas.microsoft.com//SQLServer//reporting//reportdesigner");           
                    doc.SelectSingleNode("/ns:Report/ns:buttons/ns:workshop1", oManager).InnerText = "new text";
                    reader.Close();
                    doc.Save(@"C:\\test.xml"); 

Xml文件有多个命名空间,因此问题在于解决它。

我的XML文件是

   <?xml version="1.0"?>
<Report xmlns="http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition" xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner">
  <buttons>
    <workshop1>Google</workshop1>
    <url1>www.google.co.uk</url1>
  </buttons>
</Report>

1 个答案:

答案 0 :(得分:0)

正如@MatthewStrawbridge在评论中所建议的,问题是声明的前缀指向不正确的命名空间URL。您不需要转义正斜杠,因此应该以这种方式声明指向默认命名空间的前缀:

oManager.AddNamespace("ns", "http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition");

然后,您可以正常工作,将<workshop1>元素的值更改为"new text"。您甚至不需要在代码中声明第二个前缀映射,因为您不使用它。