[英]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.