我正在尝试将XML属性的XPath作为字符串存储在单独的文件中,这样如果XPath发生更改,我可以轻松修改导航到属性而无需更改代码。
例如,在以下XML中:
<Result>
<Server = "main">
<Client id="1"></Client>
</Server>
</Result>
如果我想导航到Client元素的id属性,我可以使用以下字符串:
Result-&GT;服务器 - &GT;客户端 - &GT;编号
我不确定在C#中我如何使用这种字符串形式的XPath进行导航,然后从目标XML中读取属性值。
请帮忙。 Harit
答案 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;
}