Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.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# 如何使用XPath获取XML节点的属性值_C#_Xml_Xpath - Fatal编程技术网

C# 如何使用XPath获取XML节点的属性值

C# 如何使用XPath获取XML节点的属性值,c#,xml,xpath,C#,Xml,Xpath,这是我的脚本,但它只打印控制台中的空格。有人能解释一下如何使用xPath从XML文件中获取属性值吗 XPathNavigator nav; XPathDocument docNav; XPathNodeIterator NodeIter; XmlNamespaceManager ns; Int32 elementCount; String windowName; private void Form1_Load(object sende

这是我的脚本,但它只打印控制台中的空格。有人能解释一下如何使用xPath从XML文件中获取属性值吗

    XPathNavigator nav;
    XPathDocument docNav;
    XPathNodeIterator NodeIter;
    XmlNamespaceManager ns;

    Int32 elementCount;

    String windowName;

    private void Form1_Load(object sender, EventArgs e)
    {
        docNav = new XPathDocument("C:/BlueEyeMacro/DaMaGeX/Applications/WindowBuilder/GUI.xml");
        nav = docNav.CreateNavigator();
        ns = new XmlNamespaceManager(nav.NameTable); 
        elementCount = nav.Select("/GUI/window").Count;
        Console.WriteLine(elementCount);
        for (int i = 1; i <= elementCount; i++)
        {
            NodeIter = nav.Select("/GUI/window[@ID="+i+"]");
            windowName = NodeIter.Current.GetAttribute("name", ns.DefaultNamespace);
            Console.WriteLine("{0}", windowName);
        }
    }
}
XPathNavigator导航;
XPathDocument docNav;
XPathNodeIterator NodeIter;
xmlnamespaces管理器;
Int32元素计数;
字符串窗口名;
私有void Form1\u加载(对象发送方、事件参数e)
{
docNav=new-XPathDocument(“C:/blueyemacro/DaMaGeX/Applications/WindowBuilder/GUI.xml”);
nav=docNav.CreateNavigator();
ns=新的XmlNamespaceManager(nav.NameTable);
elementCount=nav.Select(“/GUI/window”).Count;
控制台写入线(elementCount);

对于(int i=1;i我想,您必须首先调用NodeIter.MoveNext(),就像下面的代码:

XPathNodeIterator nodesText = nodesNavigator.SelectDescendants(XPathNodeType.Text, false);

while (nodesText.MoveNext())
{
    Console.Write(nodesText.Current.Name);
    Console.WriteLine(nodesText.Current.Value);
}

我想,您必须首先调用NodeIter.MoveNext(),如下面的代码所示:

XPathNodeIterator nodesText = nodesNavigator.SelectDescendants(XPathNodeType.Text, false);

while (nodesText.MoveNext())
{
    Console.Write(nodesText.Current.Name);
    Console.WriteLine(nodesText.Current.Value);
}

您还可以修改代码以执行此操作:

    for (int i = 1; i <= elementCount; i++) 
    { 
        var NodeIter = nav.SelectSingleNode("/GUI/window[@ID='"+i+"']/@name"); //This selects the @name attribute directly
        Console.WriteLine("{0}", NodeIter.Value); 
    }

for(int i=1;i您还可以修改代码以执行此操作:

    for (int i = 1; i <= elementCount; i++) 
    { 
        var NodeIter = nav.SelectSingleNode("/GUI/window[@ID='"+i+"']/@name"); //This selects the @name attribute directly
        Console.WriteLine("{0}", NodeIter.Value); 
    }

for(int i=1;i您可以直接获取属性的字符串值:

    for (int i = 1; i <= elementCount; i++) 
    { 
     // This obtains the value of the @name attribute directly
     string val = 
               nav.Evaluate("string(/GUI/window[@ID='"+i+"']/@name)") as string;                
     Console.WriteLine(val); 
    }

for(int i=1;i您可以直接获取属性的字符串值:

    for (int i = 1; i <= elementCount; i++) 
    { 
     // This obtains the value of the @name attribute directly
     string val = 
               nav.Evaluate("string(/GUI/window[@ID='"+i+"']/@name)") as string;                
     Console.WriteLine(val); 
    }

用于(int i=1;i您的代码看起来很奇怪,因为它可能在WinForm project中使用控制台输出,但在其他方面Select语句是合理的。请描述您遇到的问题。DaMaGeX:您可能对比当前接受的解决方案更短/更简单的解决方案感兴趣。您的代码看起来很奇怪,因为它可能在WinForm project中使用控制台输出,但是否则,Select语句是合理的。请描述您遇到的问题。DaMaGeX:您可能对比当前接受的解决方案更短/更简单的解决方案感兴趣。