我有一些使用XmlDocument从带有命名空间的xml文件中读取的代码。 我的挑战在于,我当前硬编码了我正在读取的文件的命名空间,并将其传递给XmlNamespaceManager。 我希望我的方法更加灵活。 能够阅读任何类型的xml文件。 如果它具有命名空间,则使用命名空间管理器读取元素而无需硬编码命名空间。 如果文件没有命名空间,则继续解析它。 以下是我所做的。
xmldoc = new XmlDocument ();
xmldoc.Load (fileLocation);
XmlNamespaceManager nameSpaceManager = new XmlNamespaceManager(xmldoc.NameTable);
nameSpaceManager.AddNamespace ("ns","http://schemas.sample.data.org/2005");
XmlNodeList nodeList = xmldoc.SelectNodes("/ns:Demo/ns:Items", nameSpaceManager);
if (nodeList != null)
{
foreach (XmlNode childNode in nodeList)
{
string first = childNode.SelectSingleNode ("ns:First", nameSpaceManager).InnerText;
string second= childNode.SelectSingleNode ("ns:Second", nameSpaceManager).InnerText;
string third = childNode.SelectSingleNode ("ns:Third", nameSpaceManager).InnerText;
}
}
这是我正在使用的示例 XML 文件
<Demo xmlns:i="http://www.justasample.com" xmlns="http://schemas.sample.data.org/2005">
<Items>
<First>first</First>
<Second>second</Second>
<Third>third</Third>
</Items>
</Demo>