‘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"
现在你的文档应该是这样的:
.....