'xsi' - необъявленный префикс, использующий XmlDocument
Я получаю 'xsi' - необъявленный префикс, использующий XmlDocument.
Я пытаюсь прочитать файл, который имеет следующую схему:
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2"
xmlns:gx="http://www.google.com/kml/ext/2.2"
xmlns:kml="http://www.opengis.net/kml/2.2"
xmlns:atom="http://www.w3.org/2005/Atom">
<Document>
<Document id="robert" xsi:schemaLocation="http://www.opengis.net/kml/2.2 http://schemas.opengis.net/kml/2.2.0/ogckml22.xsd http://www.google.com/kml/ext/2.2 http://code.google.com/apis/kml/schema/kml22gx.xsd">
<Placemark>
<description>test</description>
</Placemark>
</Document>
</Document>
</kml>
Я пробовал следующее:
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
позже. Поэтому игнорирование этого не было бы решением. Кто-нибудь знает, как правильно загрузить схему? Проблема / ошибка, кажется, находится в этом узле:
<Document id="robert" xsi:schemaLocation="http://www.opengis.net/kml/2.2 http://schemas.opengis.net/kml/2.2.0/ogckml22.xsd http://www.google.com/kml/ext/2.2 http://code.google.com/apis/kml/schema/kml22gx.xsd">
Обновление № 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
Но я получаю эту ошибку сейчас:
«Указанный узел не может быть вставлен как действительный дочерний элемент этого узла, поскольку указанный узел имеет неправильный тип». Похоже, я все ближе ...