C# 使用xpath选择节点

C# 使用xpath选择节点,c#,xml,xpath,C#,Xml,Xpath,我想使用xpath访问xml的深层链接,其中还有一个名称空间。目前我有: XmlNode link = xmlDoc .SelectSingleNode("dn:feed", nsmgr) .SelectSingleNode("dn:entry", nsmgr) .SelectSingleNode("dn:link", nsmgr); 这很好,但由于路径很长,我只想使用xpath,如: XmlNode link = xmlDoc.SelectSingleNode("dn

我想使用xpath访问xml的深层链接,其中还有一个名称空间。目前我有:

XmlNode link = xmlDoc
    .SelectSingleNode("dn:feed", nsmgr)
    .SelectSingleNode("dn:entry", nsmgr)
    .SelectSingleNode("dn:link", nsmgr);
这很好,但由于路径很长,我只想使用xpath,如:

XmlNode link = xmlDoc.SelectSingleNode("dn:feed/entry/link", nsmgr);

但这不起作用。

我怀疑这是一个名称空间问题。您只为
提要
元素指定名称空间,而不是为
条目
链接
指定名称空间。试试这个:

XmlNode link = xmlDoc.SelectSingleNode("dn:feed/dn:entry/dn:link", nsmgr);
但就我个人而言,如果可能的话,我会使用LINQ to XML—除了作为一种比
XmlDocument
更好的API之外,它使使用名称空间变得非常容易:

XDocument doc = ...;
XNamespace dn = "...";
XElement link = doc.Element(dn + "feed")
                   .Element(dn + "entry")
                   .Element(dn + "link");

我更喜欢用代码而不是XPath表达我想要的东西(属性、元素等,在适当的情况下带有条件)。当然,您的里程数可能会有所不同。

我怀疑这是名称空间问题。您只为
提要
元素指定名称空间,而不是为
条目
链接
指定名称空间。试试这个:

XmlNode link = xmlDoc.SelectSingleNode("dn:feed/dn:entry/dn:link", nsmgr);
但就我个人而言,如果可能的话,我会使用LINQ to XML—除了作为一种比
XmlDocument
更好的API之外,它使使用名称空间变得非常容易:

XDocument doc = ...;
XNamespace dn = "...";
XElement link = doc.Element(dn + "feed")
                   .Element(dn + "entry")
                   .Element(dn + "link");

我更喜欢用代码而不是XPath表达我想要的东西(属性、元素等,在适当的情况下带有条件)。当然,您的里程数可能会有所不同。

我怀疑这是名称空间问题。您只为
提要
元素指定名称空间,而不是为
条目
链接
指定名称空间。试试这个:

XmlNode link = xmlDoc.SelectSingleNode("dn:feed/dn:entry/dn:link", nsmgr);
但就我个人而言,如果可能的话,我会使用LINQ to XML—除了作为一种比
XmlDocument
更好的API之外,它使使用名称空间变得非常容易:

XDocument doc = ...;
XNamespace dn = "...";
XElement link = doc.Element(dn + "feed")
                   .Element(dn + "entry")
                   .Element(dn + "link");

我更喜欢用代码而不是XPath表达我想要的东西(属性、元素等,在适当的情况下带有条件)。当然,您的里程数可能会有所不同。

我怀疑这是名称空间问题。您只为
提要
元素指定名称空间,而不是为
条目
链接
指定名称空间。试试这个:

XmlNode link = xmlDoc.SelectSingleNode("dn:feed/dn:entry/dn:link", nsmgr);
但就我个人而言,如果可能的话,我会使用LINQ to XML—除了作为一种比
XmlDocument
更好的API之外,它使使用名称空间变得非常容易:

XDocument doc = ...;
XNamespace dn = "...";
XElement link = doc.Element(dn + "feed")
                   .Element(dn + "entry")
                   .Element(dn + "link");

我更喜欢用代码而不是XPath表达我想要的东西(属性、元素等,在适当的情况下带有条件)。您的里程可能会有所不同,当然。

但这不起作用。
你能给我们多一点吗?
但这不起作用。
你能给我们多一点吗?
但这不起作用。
你能给我们多一点吗?
但这不起作用。
你能给我们多一点吗?是的,Xpath可能非常棘手,它是一种“语言”,因为LINQ在中无处不在。NETYes,Xpath可能非常棘手,它是一种“语言”,因为LINQ在中无处不在。NETYes,Xpath可能非常棘手,它是一种“语言”,因为LINQ在中无处不在。NETYes,Xpath可能非常棘手,而且是一种自己的“语言”,因为LINQ在.NET中无处不在