我的问题是我的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>
答案 0 :(得分:0)
正如@MatthewStrawbridge在评论中所建议的,问题是声明的前缀指向不正确的命名空间URL。您不需要转义正斜杠,因此应该以这种方式声明指向默认命名空间的前缀:
oManager.AddNamespace("ns", "http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition");
然后,您可以正常工作,将<workshop1>
元素的值更改为"new text"
。您甚至不需要在代码中声明第二个前缀映射,因为您不使用它。