簡體   English   中英

通過XmlDocument解析Xml屬性

[英]Parse Xml attributes via XmlDocument

美好的一天!

我嘗試解析Xml文檔:

結構體:

<root>
  <SelectedConfig name="configuration1"/>
    <config name="configuration1">
     <Column Id="0"  name="111"/>
  ...
 </root>

我試着這樣解析它:

 XmlNode configNameNode = _doc.SelectSingleNode("//SelectedConfig");

        if (configNameNode != null)
        {
            string configName = configNameNode.Attributes["name"].Value; 

            var config = _doc.SelectNodes("//config");

            XmlNodeList columnNodes = _doc.SelectNodes("//config/Column");

            foreach (XmlNode node in columnNodes)
            {
                var id = node.Attributes["Id"].Value;
                var name = node.Attributes["name"].Value;

                Tuple<string, String> numberOfColumnToColumnName = new Tuple<string, string>(id, name);
                numberOfColumnToColumnNameTupleColl.Add(numberOfColumnToColumnName);

            }
        }

但是,如果我添加:

<config name="configuration2">

我得到N * 2個節點// config / column。

如何僅從configuration1或2中選擇一組xml節點?

謝謝!

您有多個節點“ config”,每個節點都有多個子節點“ column”。
因為所有這些節點都具有相同的名稱,只是它們的屬性不同,所以函數XmlNodeList columnNodes = _doc.SelectNodes("//config/Column"); 將收集所有“配置”的所有“列”節點。
解決方案1:將配置節點重命名為config_xxx,例如config_configuration1。 但我認為這不是您想要的。
解決方案2: config = _doc.SelectNodes("//config"); 已經為您提供了一個節點列表。 在列表上方的for each cfgEntry in config運行一個for each cfgEntry in config在每個節點上調用cfgEntry.SelectNodes("column") 然后,您將只獲得該單個配置節點的列節點。

如果嘗試獲取選定的配置,則可以嘗試以下代碼。

string xPath = string.format("//config[@name='{0}']/Column", configName);
var config = _doc.SelectNodes(xPath);

暫無
暫無

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

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