可用Foreach NodeList Enumerator,
代码
1 <Parameters >
2 <Parameter>
3 <Name>Date</Name>
4 <Value >[Date].[Year-Month].[Year].&[2010]</Value>
5 </Parameter>
6 <Parameter>
7 <Name>Bank</Name>
8 <Value >{ [Bank].[Bank].&[69],[Bank].[Bank].&[70] }</Value>
9 </Parameter>
10 </Parameters>
EnumerationType:ElementCollection
OuterXPath: /Parameters/Parameter
InnerXPath:*
映射:User::paramName,索引0,第一次外循环,取得字符串"Date"
User::paramValue,索引为1,第一次外循环取得字符串"[Date].[Year-Month].[Year].&[2010]"
但是,如果XML中包含命名空间,如下所示,上面的设置不会获取任何节点。
代码
1 <Parameters xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="urn:schemas-microsoft-com:xml-analysis">
2 <Parameter>
3 <Name>Date</Name>
4 <Value xsi:type="xsd:string">[Date].[Year-Month].[Year].&[2010]</Value>
5 </Parameter>
6 <Parameter>
7 <Name>Bank</Name>
8 <Value xsi:type="xsd:string">{ [Bank].[Bank].&[69],[Bank].[Bank].&[70] }</Value>
9 </Parameter>
10 </Parameters>
Foreach NodeList中还没找到相关设置,这里直接用SSIS中脚本任务来处理,示例代码如下:
代码
public void Main()
{
// TODO: Add your code here
String mdxQuery = Dts.Variables["textData"].Value.ToString();
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(Dts.Variables["parameters"].Value.ToString());
XmlNamespaceManager xnsm=new XmlNamespaceManager(xmlDoc.NameTable);
xnsm.AddNamespace("param", "urn:schemas-microsoft-com:xml-analysis");
XmlNodeList nodeList = xmlDoc.SelectNodes("/param:Parameters/param:Parameter",xnsm);
Dts.Variables["nodeList"].Value = nodeList;
foreach (XmlNode xmlNode in nodeList) {
String paramName=xmlNode.ChildNodes[0].LastChild.Value.ToString();
paramName = "@[" + paramName + "]";
String paramValue = xmlNode.ChildNodes[1].LastChild.Value.ToString();
paramValue = "\"" + paramValue + "\"";
mdxQuery=mdxQuery.Replace(paramName,paramValue);
}
Dts.Variables["mdxQuery"].Value = mdxQuery;
Dts.TaskResult = (int)ScriptResults.Success;
}
参考
Select Nodes Using XPath Navigation(http://msdn.microsoft.com/en-us/library/d271ytdx.aspx)
Andrew Chen
浙公网安备 33010602011771号