2017-05-31 147 views
2

我有下面的XML:计数XML节点脚本任务SSIS

<Users> 
    <User ID="User1" 
     <Element1>Name1<Element1> 
    </User> 
    <User ID="User2" 
     <Element1>Name2<Element1> 
    </User> 
    <User ID="User3" 
     <Element1>Name3<Element1> 
    </User> 
</Users> 

创建此XML并存储在SSIS一个字符串变量。 我需要在进行下一步之前对用户节点进行计数,并且我想使用脚本任务来完成它。这是我想,我需要做的

// assign string to a variable 
String XMLString = Dts.Variables["User::XMLString"].Value 
// Convert variable to xml data type: 
XmlSerializer serializer = new XmlSerializer(XMLString); 
//Count the user nodes and assign integer to a variable. 
Dts.Variables["User::UserCount"].Value = serializer.SelectNodes("Users/User").Count; 

我一直在试图找出如何做到这一点,但我很新的C#和我真的需要有关这方面的例子吧。 谢谢!

+0

https://stackoverflow.com/questions/17678480/how-to-count-the-childnodes-for-the-specific-node-in-the-xml-document或查找如何使用XPATH ' – MethodMan

+0

定义'XMLString'变量时,您应该使用'string'而不是'String'。带's'的小字符串是数据类型,另一个是类。 – TheEsnSiavashi

+0

谢谢你的信息! – Maria

回答

2

你可以这样做:

 string XMLString = Dts.Variables["User::XMLString"].Value; 
     Dts.Variables["User::UserCount"].Value = (Regex.Matches(XMLString, @"</User>")).Count; 

看到这里的代码 this link

+1

这工作完美。我只需要添加将该变量转换为字符串。非常感谢! – Maria

0

试试这个:

XmlDocument doc = new XmlDocument(); 
doc.Load(XMLString); 
Dts.Variables["User::UserCount"].Value = doc.SelectNodes("User").Count; 
+0

谢谢你,但脚本任务不能成功运行。我添加了下面的代码,一旦它到达XmlDocument,它就永远不会完成:string XMLString = Dts.Variables [“User :: XMLString”]。Value.ToString(); XmlDocument doc = new XmlDocument(); doc.Load(XMLString); Dts.Variables [“User :: UserCount”]。Value = doc.SelectNodes(“User”)。Count; Dts.TaskResult =(int)ScriptResults.Success; – Maria