簡體   English   中英

從使用 xpath 的節點前綴的 xml 中提取對象

[英]Extracting objects from xml that uses node prefixes using xpath

我在名為 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:\temp\config.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']");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM