提问人:Craig 提问时间:5/22/2023 更新时间:5/22/2023 访问量:61
XmlNameSpaceManager - 确定 XmlDocument 的正确命名空间管理器的优雅方式
XmlNameSpaceManager - Elegant way of determining correct namespace manager for XmlDocument
问:
我有大量的xml文件,它们对应于三个可能的命名空间表之一,我想通过XmlNode.SelectSingleNode提取数据,但是我想知道这是尝试通过C#代码(.NET)建立要使用的XmlNameSpaceManager的最优雅方法。
我正在尝试建立一种最优雅的方法来查找与 XmlDocument 实例关联的正确、相应的 NameSpaceManager。
XmlNode x = xmlDoc.SelectSingleNode(“/root/Person/Name”, namespaceManager);
namespaceManager 可以与以下任何一项相关联:-
private XmlNamespaceManager namespaceManager_v1()
{
NameTable nt = new NameTable();
XmlNamespaceManager nsmgr = new XmlNamespaceManager(nt);
nsmgr.AddNamespace("a", "a:v1");
nsmgr.AddNamespace("b", "b:v1");
nsmgr.AddNamespace("version", "1.0");
}
或
private XmlNamespaceManager namespaceManager_v2()
{
NameTable nt = new NameTable();
XmlNamespaceManager nsmgr = new XmlNamespaceManager(nt);
nsmgr.AddNamespace("a", "a:v2");
nsmgr.AddNamespace("b", "b:v2");
nsmgr.AddNamespace("version", "2.0");
}
或
private XmlNamespaceManager namespaceManager_v3()
{
NameTable nt = new NameTable();
XmlNamespaceManager nsmgr = new XmlNamespaceManager(nt);
nsmgr.AddNamespace("a", "a:v3");
nsmgr.AddNamespace("b", "b:v3");
nsmgr.AddNamespace("version", "3.0");
}
是否需要遍历直到返回结果?
if (xmlDoc.SelectSingleNode("/root/Person/Name", namespaceManager_v1) != null)
{
//Do something
}
else
{
if (xmlDoc.SelectSingleNode("/root/Person/Name", namespaceManager_v2) != null)
{
//Do something
}
else
{
if (xmlDoc.SelectSingleNode("/root/Person/Name", namespaceManager_v3) != null)
{
//Do something
}
}
}
任何建议都非常感谢。
谢谢
答: 暂无答案
评论
XmlNamespaceManager