使用xpath从使用节点前缀的xml中提取对象



我在一个名为C:\temp\config.XML的文件中有以下XML:

<?xml version="1.0" encoding="utf-8"?>
<dvp:systemConfig xmlns:devop="urn:foo.com:sys:rules">
<dvp:map id="rootFolderMap">
<dvp:entry key="anything" value="folder1"/>
<dvp:entry key="config" value="folder2"/>
<dvp:defaultValue value="folder1" />
</dvp:map>
<dvp:map id="folderMappings">
<dvp:entry key="SYS" value="System" />
<dvp:entry key="OPS" value="Operations" />
<dvp:entry key="DEV" value="Development" />
<dvp:defaultValue value="Miscellaneous" />
</dvp:map>
</dvp:systemConfig>

我现在正试图编写C#代码,从这个XML中提取值。特别是节点中的值属性列表。

List<string> folderNames = new List<string>
XmlDocument doc = new XmlDocument();
doc.Load(@"C:tempconfig.xml");
XmlNamespaceManager nsMgr = new XmlNamespaceManager(doc.NameTable);
XmlNodeList xmlNodeList =
doc.SelectNodes("/systemConfig/map[@id='folderMappings']/entry",nsMgr);
foreach (XmlNode xmlNode in xmlNodeList)
{        
// I'm hoping xmlNodeList now contains a list of <dvp:entry> nodes.
string folderName = xmlNode.Attributes["value"].ToString().Trim(); 
folderNames.Add(folderName);
}

但是,这段代码返回一个空的xmlNodeList,所以最后一个循环没有项。

我不知道如何使用XmlNamespaceManager来获取"dvp"前缀,也不知道它在从磁盘上的XML加载XmlDocument时是否能解决这个问题。

有人能给我一些指导吗?如何使用xpath来检索带有前缀节点的xml的值?不幸的是,我没有能力更改XML的格式,所以我必须使用提供的XML。

感谢堆,

大卫。

您可以使用local-name((忽略命名空间

XmlNodeList xmlNodeList =
doc.SelectNodes("/*[local-name()='systemConfig']/*[local-name()='map'][@id='folderMappings']");

最新更新