我收到'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
}
如果我取消註釋行忽略命名空間,它加載OK但稍後未能保存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
,但我接受現在這個錯誤:
「的規定節點不能作爲此節點的有效子節點插入,因爲指定節點的類型是錯誤的。「它看起來像我越來越近......
感謝您的及時迴應。一個問題,你將如何在xmldoc.load之前(在源代碼中)這樣做,因爲我無法更改原始文件本身。再次感謝。 – user3062349
如果文件丟失,那麼它是一個無效的xml文件(您不能使用未聲明的名稱空間)並需要修復。從哪裏獲取這些文件 –
該文件是XML格式的有效谷歌地球KML文件。它確實在谷歌地球上開放。 – user3062349