C# 所有属性的Xpath选择

C# 所有属性的Xpath选择,c#,xml,xpath,C#,Xml,Xpath,我在c#类中有下面的xml 这是可行的,但目前的问题是,我必须为每个节点路径重复整个代码块 XmlNodeList aNodes = doc.SelectNodes("/call/importDataOptions"); .... 一定有更好的办法。你知道我如何在一个过程中完成属性吗?也许仅仅使用转换到xmlement就可以帮助你减少代码: XmlDocument doc = new XmlDocument(); doc.LoadXml(xml); foreach (XmlElement c

我在c#类中有下面的xml

这是可行的,但目前的问题是,我必须为每个节点路径重复整个代码块

XmlNodeList aNodes = doc.SelectNodes("/call/importDataOptions");
....

一定有更好的办法。你知道我如何在一个过程中完成属性吗?

也许仅仅使用转换到
xmlement
就可以帮助你减少代码:

XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);

foreach (XmlElement credential in doc.SelectNodes("/call/credentials"))
{
    credential.SetAttribute("login"       , "myemail.com" );
    credential.SetAttribute("password"    , "passtest"    );
    credential.SetAttribute("instanceCode", "TestInstance");
}
另一种选择是创建一个类似于XML词汇表的对象结构,并将输入反序列化到该对象中,但这似乎有些过分

编辑:根据您的评论,您可以选择:

foreach (XmlElement node in doc.SelectNodes("/call/*")) // it's case sensitive
{
    switch(node.Name)
    {
        case "credentials":
            node.SetAttribute("login"       , "myemail.com" );
            node.SetAttribute("password"    , "passtest"    );
            node.SetAttribute("instanceCode", "TestInstance");
            break;
        case "importDataOptions":
            // ...
            break;
        default:
            throw new ArgumentOutOfRangeException("Unexpected node: "+node.Name);
    }
}

我应该补充一点,XML比我展示的更多节点更大。foreach(XmlElement阳极中的阳极)。。。SetAttribute(“login”,“myemail.com”)?问题是我仍然必须循环使用不同的节点路径,即/call/importDataOptions。我尝试选择节点/Call/*但没有乐趣。
XmlNodeList aNodes = doc.SelectNodes("/call/importDataOptions");
....
XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);

foreach (XmlElement credential in doc.SelectNodes("/call/credentials"))
{
    credential.SetAttribute("login"       , "myemail.com" );
    credential.SetAttribute("password"    , "passtest"    );
    credential.SetAttribute("instanceCode", "TestInstance");
}
foreach (XmlElement node in doc.SelectNodes("/call/*")) // it's case sensitive
{
    switch(node.Name)
    {
        case "credentials":
            node.SetAttribute("login"       , "myemail.com" );
            node.SetAttribute("password"    , "passtest"    );
            node.SetAttribute("instanceCode", "TestInstance");
            break;
        case "importDataOptions":
            // ...
            break;
        default:
            throw new ArgumentOutOfRangeException("Unexpected node: "+node.Name);
    }
}