根据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列表,就可以根据名字来获取了,如果存在多个的我们可以再进行筛选。