Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用存储为字符串的XPath进行导航_C#_Xml_Xpath - Fatal编程技术网

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

C# 使用存储为字符串的XPath进行导航,c#,xml,xpath,C#,Xml,Xpath,我试图将XML属性的XPath作为字符串存储在一个单独的文件中,这样,如果XPath发生更改,我就可以轻松地修改属性导航,而无需更改代码 例如,在以下XML中: <Result> <Server = "main"> <Client id="1"></Client> </Server> </Result> 如果要导航到客户端元素的id属性,可以使用以下字符串: 结果->服务器->客户端->id 我不确定如

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

例如,在以下XML中:

<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