根据Xml节点名获取Xpath

我们经常使用Xpath去获取Xml中某个节点的值,但是有时候我们需要反过来,根据Xml的节点名来获取对应的Xpath。


找了一下,几乎所有的Xml库都没有提供类似的功能,这里我们就简单说一说这玩意咋实现比较方便。


这里我们先不考虑那么多,就是获取一个节点名,一个节点xpath,暂时不去整位置之类的玩意。


我们先定义一个类来接收这个玩意。

public class XpathInfo
{
    public XpathInfo(string name, string xpath)
    {
        Name = name;
        Xpath = xpath;
    }
    
    public string Name { get;set; }
    public string Xpath { get;set; }
}

这里面我们只定义一个名字一个Xpath,剩下的暂时不考虑,然后我们就用这个类来处理。


然后我们来获取某个Xml中所有的Xpath.

var xpathInofps = new List<XpathInfo>();
var document = XDocument.Parse(要处理的Xml字符串);
foreach (var node in document.Descendants())
{
    var name = node.Nmae.LocalName;
    var path = node.AncestorsAndSelf().Select(x => x.Name.LocalName).Reverse();
    var xpath = string.Join("/", path);
    xpathInfos.Add(new XpathInfo(name, xpath));
}

这样,我们就能生成一个Xpath列表,就可以根据名字来获取了,如果存在多个的我们可以再进行筛选。

posted @ 2022-09-13 10:39  jvx  阅读(1387)  评论(0编辑  收藏  举报