internal static void SelectForEachFromValues(List <ForEachItem> parameterSetSources, ref XmlDocument values,
                                                     Dictionary <string, ParameterInfo> globalParamSets, object parentExitData)
        {
            foreach (ForEachItem fe in parameterSetSources)
            {
                ParameterSourceInfo pss = fe.ParameterSource;

                XmlDocument v   = pss.HasName ? GetParamSet(pss.Name, globalParamSets, pss.IsNameParentExitData, parentExitData) : values;
                XmlNode     src = v?.SelectSingleNode(pss.Source);
                if (src != null)
                {
                    if (src.NodeType == XmlNodeType.Element)
                    {
                        XmlNodeList nodes = src.SelectNodes("*");
                        if (nodes.Count > 0)
                        {
                            foreach (XmlNode node in nodes)
                            {
                                fe.Values.Add(node.InnerXml);   //InnerText or just the node?
                            }
                        }
                        else
                        {
                            fe.Values.Add(src.InnerText);
                        }
                    }
                    else
                    {
                        fe.Values.Add(src.Value);
                    }
                }
            }
        }
Beispiel #2
0
        internal static void SelectForEachFromValues(List <ForEachItem> forEachFromValues, ref Dictionary <object, object> values,
                                                     Dictionary <string, ParameterInfo> globalParamSets, object parentExitData)
        {
            foreach (ForEachItem fe in forEachFromValues)
            {
                ParameterSourceInfo pss = fe.ParameterSource;

                string[] path = pss.Source?.Split(':');
                if (path.Length > 0)
                {
                    Dictionary <object, object> parms = pss.HasName ? GetParamSet(pss.Name, globalParamSets, pss.IsNameParentExitData, parentExitData) : values;

                    object element = null;
                    try
                    {
                        element = SelectElements(parms, new List <string>()
                        {
                            pss.Source
                        });
                    }
                    catch (Exception ex)
                    {
                        throw new Exception($"Could not resolve ForEach->ParameterSourceItems->Source: [{pss.Source}].  Exception: {ex.Message}");
                    }


                    if (element != null)
                    {
                        if (pss.Parse)
                        {
                            element = TryParseValue(element);
                        }

                        if (element is List <object> )
                        {
                            fe.Values = (List <object>)element;
                        }
                        else
                        {
                            string elementAsYaml = Serialize(element);
                            Dictionary <object, object> elementAsDict = Deserialize(elementAsYaml);
                            fe.Values = FindFirstListInDict(elementAsDict);
                        }
                    }
                }
            }
        }