我真的在如何在winforms C#应用程序中完成以下操作。我的代码在VBA的旧Access数据库中工作,但我需要转换它。
示例XML:
<TransactionsResponse>
- <Transactions>
- <Transaction>
<AccountId>1</AccountId>
<ActionType>test</ActionType>
</Transaction>
- <Transaction>
<AccountId>1</AccountId>
<ActionType>blah</ActionType>
</Transaction>
- <Transaction>
<AccountId>1</AccountId>
<ActionType>no</ActionType>
</Transaction>
- <Transaction>
<AccountId>1</AccountId>
<ActionType>yes</ActionType>
</Transaction>
- <Transaction>
<AccountId>1</AccountId>
<ActionType>testing</ActionType>
</Transaction>
- <Transaction>
<AccountId>1</AccountId>
<ActionType>lame</ActionType>
</Transaction>
</Transactions>
</TransactionsResponse>
因此,如果我的操作列表包含以下内容,则上面的XML总共有6条记录:
test
blah
我需要遍历事务,然后是导致最终记录数为4的操作列表。
我原以为我可以首先遍历XML以获取总记录数,然后再次循环,检查操作以及是否存在,然后将记录计数减一。
我是C#中使用XML的新手,所以我完全不知道如何继续。任何建议或建议都会很棒。
答案 0 :(得分:2)
您需要开始使用Linq to Xml
var xmlActions = XElement.Parse(GetXmlString());
IList<string> actionsFromDatabase = GetActionsFromDatabase();
int actionCount = xmlActions.Descendants("Transaction").Count();
foreach (var action in actionsFromDatabase)
{
if (xmlActions.Descendants().Any(el => el.Name == "ActionType" && el.Value == action))
{
actionCount--;
}
}
答案 1 :(得分:2)
如果您可以使用Linq to XML,那么您可以参考以下链接获取示例代码/示例:http://msdn.microsoft.com/en-us/vstudio/bb688087/
答案 2 :(得分:2)
您可以使用XDocument
来解析XML。
XDocument doc = XDocument.Parse(xml.ToString());
获得XDocument
实例后,您可以使用它来提取所需的信息。
IEnumerable<XElement> transactions = doc.
Descendants("TransactionsResponse").
Descendants("Transactions");
foreach (XElement element in transactions)
{
String actionType = element.Descendants("ActionType").Single().Value;
if(myActionTypes.Contains(actionType))
//do whatever you want since you know the action
//type of the transaction now
}
答案 3 :(得分:1)
我建议使用Linq和XDocument来完成这项工作。
将XML加载到XDocument中,例如var doc = XDocument.Parse(xmlText);
将要过滤的操作加载到字符串列表或数组中:
var stringlist = new List<string>() { "test", "blah" };
使用linq查询选择与您的字符串列表不匹配的事务元素:
var q = from transaction in doc.Descendents("Transaction")
where !stringlist.Contains(transaction.Element("ActionType").Value))
select transaction;
然后计算所选项目:
return q.Count();
*注意:这不在我的脑海中,代码可能包含语法错误。