C# 使用存储为字符串的XPath进行导航
我试图将XML属性的XPath作为字符串存储在一个单独的文件中,这样,如果XPath发生更改,我就可以轻松地修改属性导航,而无需更改代码 例如,在以下XML中:C# 使用存储为字符串的XPath进行导航,c#,xml,xpath,C#,Xml,Xpath,我试图将XML属性的XPath作为字符串存储在一个单独的文件中,这样,如果XPath发生更改,我就可以轻松地修改属性导航,而无需更改代码 例如,在以下XML中: <Result> <Server = "main"> <Client id="1"></Client> </Server> </Result> 如果要导航到客户端元素的id属性,可以使用以下字符串: 结果->服务器->客户端->id 我不确定如
<Result>
<Server = "main">
<Client id="1"></Client>
</Server>
</Result>
如果要导航到客户端元素的id属性,可以使用以下字符串:
结果->服务器->客户端->id
我不确定如何在C#中使用这种XPath字符串形式导航,然后从目标XML读取属性值
请帮忙。
Harit首先,您的XML有点奇怪,因为
<Server = "main">
然后从文件中读取字符串,并将其传递到如下内容:
public string GetClientIdString(string xPathString)
{
var doc = new XmlDocument();
doc.Load("SomeXml.xml");
return doc.DocumentElement.SelectSingleNode(xPathString).Value;
}
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;
}
问题是,如果您计划在服务器下有多个客户端,您就无法准确地存储XPath。但是,如果需要该功能,可以解析XPath版本并执行以下操作:
public string GetClientIdString(string xPathString)
{
var doc = new XmlDocument();
doc.Load("SomeXml.xml");
return doc.DocumentElement.SelectSingleNode(xPathString).Value;
}
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;
}
public IEnumerable GetClientString(string元素XPath,string属性)
{
var doc=新的XmlDocument();
Load(SomeXml.xml);
var clientIdStrings=新列表();
foreach(doc.DocumentElement.SelectNodes(elementXPath)中的变量节点)
{
添加(node.Attributes[attribute].Value);
}
返回客户端字符串;
}
这是无效的xml