C# 所有属性的Xpath选择
我在c#类中有下面的xml 这是可行的,但目前的问题是,我必须为每个节点路径重复整个代码块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
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);
}
}