选择单个节点

时间:2016-02-24 10:39:49

标签: c# xpath xmldocument

来自以下xml:

<response>
    <content>
        <Result xmlns="http://www.test.com/nav/webservices/types">
            <Name>Test</Name>
        </Result>
    </content>
    <status>ok</status>
</response>

我试图通过以下方式获取Name元素的值,但这不起作用:

private static void Main()
{
    var response = new XmlDocument();
    response.Load("Response.xml");
    var namespaceManager = new XmlNamespaceManager(response.NameTable);
    namespaceManager.AddNamespace("ns", "http://www.test.com/nav/webservices/types");

    Console.WriteLine(response.SelectSingleNode("/response/content/Result/Name", namespaceManager).InnerXml);
}

如何选择Name元素?

3 个答案:

答案 0 :(得分:1)

如果Xml使用“ns:”前缀定义了命名空间,那么您的代码就可以正常工作了。

但在这种情况下,命名空间没有任何前缀,这会将Result标记中所有内容的默认命名空间设置为“... / webservice / types”。

为了反映这一点,您需要修改Xpath,并告诉XmlDocument您在webservice / types命名空间中的Resultare下查找的节点。所以你的查询将如下所示:

Console.WriteLine(response.SelectSingleNode(@"/response/content/ns:Result/ns:Name", namespaceManager).InnerXml);

答案 1 :(得分:0)

为了直接获取节点的文本值,有一个iPad Air - xxxxxxxxxxxxx函数,如果在查询中使用它,它将如下所示:

text()

答案 2 :(得分:0)

试试这个:

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.InnerXml = "<response><content><Result xmlns=\"http://www.test.com/nav/webservices/types\"><Name>Test</Name></Result></content><status>ok</status>";
string elementValue = String.Empty;

if (xmlDoc != null)
{
    xNode = xmlDoc.SelectSingleNode("/Result");
    xNodeList = xNode.ChildNodes;
    foreach (XmlNode node in xNodeList)
    {
        elementValue = node.InnerText;
    }
}