使用存储为字符串的XPath进行导航

时间:2014-04-11 22:14:49

标签: c# xml xpath

我正在尝试将XML属性的XPath作为字符串存储在单独的文件中,这样如果XPath发生更改,我可以轻松修改导航到属性而无需更改代码。

例如,在以下XML中:

<Result>
  <Server = "main">
    <Client id="1"></Client>
  </Server>
</Result>

如果我想导航到Client元素的id属性,我可以使用以下字符串:

  

Result-&GT;服务器 - &GT;客户端 - &GT;编号

我不确定在C#中我如何使用这种字符串形式的XPath进行导航,然后从目标XML中读取属性值。

请帮忙。 Harit

1 个答案:

答案 0 :(得分:1)

嗯,首先,您的XML有点奇怪,

<Server = "main">

你的意思是

<Server id="main">

但是,无论如何,您可以直接存储XPath而不是字符串版本。像:

/Result/Server/Client[0]/@id

然后你从文件中读取字符串并将其传递给类似:

public string GetClientIdString(string xPathString)
{
    var doc = new XmlDocument();
    doc.Load("SomeXml.xml");
    return doc.DocumentElement.SelectSingleNode(xPathString).Value;
}

如果计划在服务器下安装多个客户端,问题就变得无法真正存储XPath。但是,如果您需要该功能,则可以解析您的XPath版本并执行以下操作:

public IEnumerable<string> GetClientIdStrings(string elementXPath, string attribute)
{
    var doc = new XmlDocument();
    doc.Load(SomeXml.xml);
    var clientIdStrings = new List<string>();

    foreach(var node in doc.DocumentElement.SelectNodes(elementXPath))
    {
        clientIdStrings.Add(node.Attributes[attribute].Value);
    }

    return clientIdStrings;
}