Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过XmlDocument解析Xml属性_C#_Xml_Xmldocument - Fatal编程技术网

C# 通过XmlDocument解析Xml属性

C# 通过XmlDocument解析Xml属性,c#,xml,xmldocument,C#,Xml,Xmldocument,你好 我尝试解析Xml文档: 结构: <root> <SelectedConfig name="configuration1"/> <config name="configuration1"> <Column Id="0" name="111"/> ... </root> ... 我试着这样解析它: XmlNode configNameNode = _doc.SelectSingleNode("//

你好

我尝试解析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);

            }
        }
XmlNode configNameNode=\u doc.SelectSingleNode(“//SelectedConfig”);
如果(configNameNode!=null)
{
字符串configName=configNameNode.Attributes[“name”].Value;
var config=_doc.SelectNodes(“//config”);
XmlNodeList columnNodes=_doc.SelectNodes(“//config/Column”);
foreach(columnNodes中的XmlNode节点)
{
var id=node.Attributes[“id”].Value;
var name=node.Attributes[“name”].Value;
Tuple numberOfColumnToColumnName=新元组(id,名称);
numberOfColumnToColumnNameTupleColl.Add(numberOfColumnToColumnName);
}
}
但是,如果我补充:

<config name="configuration2">

我得到了//config/column的N*2个节点

如何仅从配置1或2中选择一组xml节点

谢谢大家!

您有多个节点“配置”,每个节点都有多个子节点“列”。
因为所有这些节点都有相同的名称,只是属性不同,所以函数
XmlNodeList columnNodes=\u doc.SelectNodes(“//config/Column”)将收集所有“配置”的所有“列”节点。
解决方案1:将配置节点重命名为config_xxx,例如config_configuration1。但我认为这不是你想要的。

解决方案2:
config=\u doc.SelectNodes(“//config”)已为您获取节点列表。在列表中为config中的每个cfgEntry运行
,在每个节点上调用
cfgEntry.SelectNodes(“列”)
。然后,您将只获得单个配置节点的列节点

如果您试图获取所选配置,可以尝试以下代码

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

尝试
configNameNode.SelectNodes(“//config”)
我认为
[attrib=…]
应该在“config”后面,而不是“column”后面。。。?