‘xsi’是使用XmlDocument的未声明的前缀

我收到’xsi’是使用XmlDocument的未声明的前缀。

我正在尝试读取具有以下架构的文件:

     test     

我尝试过以下方法:

  XmlDocument xmldoc = new XmlDocument(); using (XmlTextReader tr = new XmlTextReader(strXmlFile)) { //tr.Namespaces = false; (uncomment to ignore namespace) xmldoc.Load(tr); // 'xsi' is an undeclared prefix error here } 

如果我取消注释该行以忽略命名空间,它会加载正常但后来无法保存XmlDocument 。 所以忽略它不会是一个解决方案。 有谁知道如何正确加载架构? 问题/错误似乎出现在此节点中:

  

更新#1我尝试了以下内容:

 XmlDocument xmldoc = new XmlDocument(); NameTable nt = new NameTable(); XmlNamespaceManager nsmgr = new XmlNamespaceManager(nt); nsmgr.AddNamespace("xsi", "http://www.w3.org/2001/XMLSchema-instance"); XmlParserContext context = new XmlParserContext(null, nsmgr, null, XmlSpace.None); XmlReaderSettings xset = new XmlReaderSettings(); xset.ConformanceLevel = ConformanceLevel.Fragment; XmlReader rd = XmlReader.Create(new StringReader(strXmlFile), xset, context); xmldoc.Load(rd); // error is still on this line 

但是我现在收到这个错误:

“无法将指定的节点作为此节点的有效子节点插入,因为指定的节点类型错误。” 看起来我越来越近了……

解:

我能够解决问题! 这是最终的代码:

 XmlDocument xmldoc = new XmlDocument(); XmlReaderSettings settings = new XmlReaderSettings { NameTable = new NameTable() }; XmlNamespaceManager xmlns = new XmlNamespaceManager(settings.NameTable); xmlns.AddNamespace("xsi", "http://www.w3.org/2001/XMLSchema-instance"); XmlParserContext context = new XmlParserContext(null, xmlns, "", XmlSpace.Default); XmlReader reader = XmlReader.Create(strXmlFile, settings, context); xmldoc.Load(reader); 

还有一个提示,当搜索节点时,记得设置正确的命名空间,例如搜索上面的地标,这将是格式:

 // Setup default namespace manager for searching through nodes XmlNamespaceManager manager = new XmlNamespaceManager(xmldoc.NameTable); string defaultns = xmldoc.DocumentElement.GetNamespaceOfPrefix(""); manager.AddNamespace("ns", defaultns); // get a list of all  nodes XmlNodeList listOfPlacemark = xmldoc.SelectNodes("//ns:Placemark", manager); // iterate over the  nodes foreach (XmlNode singlePlaceMark in listOfPlacemark) // Get the description subnode XmlNode descriptionNode = singlePlaceMark.SelectSingleNode("ns:description", manager); .. 

您缺少xsi名称空间声明:

 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 

现在你的文档应该是这样的:

  .....