C# 在XML中循环
我真的很难在我的winforms C应用程序中实现以下功能。我有一些代码可以在一个使用VBA的旧Access数据库中工作,但我需要转换它C# 在XML中循环,c#,xml,winforms,loops,C#,Xml,Winforms,Loops,我真的很难在我的winforms C应用程序中实现以下功能。我有一些代码可以在一个使用VBA的旧Access数据库中工作,但我需要转换它 我收到一个XML文件,其中包含特定用户的事务数据 我还有一个存储在SQL server环境中的操作列表 我需要遍历XML中的事务,以查看事务的操作是否是第二步中的操作之一 如果在遍历我的操作列表后,我还有任何事务。返回记录计数 示例XML: <TransactionsResponse> - <Transactions> - <Tr
<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>
我需要遍历事务,然后遍历操作列表,这将导致最终记录计数为4
我在想,我可以先遍历XML以获得总记录计数,然后再次遍历它,检查操作,如果它存在,然后将记录计数减少一
我对在C#中使用XML还不熟悉,所以我完全不知道如何继续。任何建议都会很好。您将希望开始使用
var-xmlActions=XElement.Parse(GetXmlString());
IList actionsFromDatabase=GetActionsFromDatabase();
int actionCount=xmlActions.substands(“事务”).Count();
foreach(actionsFromDatabase中的var操作)
{
if(xmlActions.subjects().Any(el=>el.Name==“ActionType”&&el.Value==action))
{
行动计数--;
}
}
如果您可以使用Linq to XML,那么您可以参考以下链接获取示例代码/示例:您可以使用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
}
IEnumerable transactions=doc。
子体(“TransactionResponse”)。
子公司(“交易”);
foreach(事务中的XElement元素)
{
字符串actionType=element.substands(“actionType”).Single().Value;
if(myActionTypes.Contains(actionType))
//既然你知道行动,你想做什么就做什么
//现在交易的类型
}
我建议使用Linq和XDocument来执行这项工作
将XML加载到XDocument中,如var doc=XDocument.Parse(xmlText)代码>
将要筛选的操作加载到字符串列表或数组中:
var stringlist = new List<string>() { "test", "blah" };
然后计算所选项目的数量:
return q.Count();
*注意:这是我不知道的,代码可能包含语法错误。您正在使用哪个版本的C#进行编程?如果您使用的是C#3.0或更高版本,那么您可以使用Linq To Xml API来处理Xml。@PawanMishra:重要的不是C#的版本,而是针对的.NET版本。你可以在VS2010中使用C#4,但目标是.NET2,你将无法使用LINQtoXML…我们给出了基本相同的答案,但没有人投票,为什么不呢?它是免费的!
var stringlist = new List<string>() { "test", "blah" };
var q = from transaction in doc.Descendents("Transaction")
where !stringlist.Contains(transaction.Element("ActionType").Value))
select transaction;
return q.Count();