【问题标题】:To return the value from foreach loop in string while parsing XML String在解析 XML 字符串时从字符串中的 foreach 循环返回值
【发布时间】:2013-11-08 12:39:30
【问题描述】:

以下是我的 XML 解析代码:

XmlDocument xmlDoc = new XmlDocument();
// string storing my XML  result from Web Service
xmlDoc.LoadXml(periodID_Value_Before_OffSet); 
string xpath = "//ResultSetHierarchy/object/measure.values/series";
var nodes = xmlDoc.SelectNodes(xpath);
foreach (XmlNode childrenNode in nodes)
{
    HttpContext.Current.Response.Write(childrenNode.SelectSingleNode
  ("//ResultSetHierarchy/object/measure.values/series/value").Value);
}

在这里,我已经解析了 XML 字符串,它是 Web 服务产生的输出。
以下是网络服务的结果

<string xmlns="http://tempuri.org/">
<ResultSetHierarchy totalResultsReturned="1" totalResults="1" firstIndex="0" 
maxCount="-1"> 
 <object id="SC.1938773693.238">
  <measure.values> 
   <series id="SC.1938773693.108280985"> 
      <value periodid="SC.1938773693.394400760" value="17" /> 
      <value periodid="SC.1938773693.1282504058" value="15" />
      <value periodid="SC.1938773693.1631528570" value="13" /> 
   </series> 
  </measure.values>
 </object> 
</ResultSetHierarchy>
</string>

我想从解析字符串时使用的 ForEach 循环中的不同变量中获取所有 periodid 的值,因为我想将此值存储在文件中,当我不使用 ForEach 循环时,我只能读取 17 的一个值,我想从 periodid 中获取所有值,任何帮助将不胜感激。

【问题讨论】:

    标签: c# xml foreach


    【解决方案1】:
    XmlDocument xmlDoc = new XmlDocument();
    xmlDoc.LoadXml(periodID_Value_Before_OffSet); // string storing my XML 
    var items = doc.GetElementsByTagName("value");
    var xmlActions = new string[items.Count];
    var xmlActionsone = new string[items.Count];
    for (int i = 0; i < items.Count; i++)
    {
        var xmlAttributeCollection = items[i].Attributes;
        if (xmlAttributeCollection != null)
        {
            var periodid= xmlAttributeCollection["periodid"];
            xmlActions[i] = periodis.Value;
            var value= xmlAttributeCollection["value"];
            xmlActionsone[i] = value.Value;
            string values = "";
            values += periodid.Value + "," + value.Value;
        }
    }
    

    此代码将读取期间 id 的计数。 然后它将根据计数循环并获取值。 然后它将使用它们之间的逗号附加到一个字符串。 最后,您只需拆分字符串并获取值。

    拆分值..

    string counts = values;
    string[] periods= counts.Split(',');
    string value1=periods[0];
    string value1=periods[1];
    string value1=periods[2];....
    

    现在您在各个变量中都有所有值..

    【讨论】:

    • 希望对您有所帮助..如果解决了您的问题,请将其标记为答案,否则在此处发表评论,我会清除您的疑虑..
    • xmlActions[i] = action.Value;... 在这一行,它给我的错误是 System.NullReferenceException: Object reference not set to an instance of an object。
    • @Sasidharan...谢谢它的工作,我检查了语法和数据,它工作得很好......谢谢。
    • @Sasidharan.. 你能在你的代码中告诉我,我如何从 for 循环返回多个值,因为我想在数组中获取值,实际上在你的代码中我必须明确提到取周期值的值的数量,但我希望只要周期可用,就应该获得值,我不想声明固定的周期数,plz ..如果你可以修改你的代码,它将是很大的帮助。
    • @sasidharan... 在您的代码中,我只得到了 Period Id 我也无法根据特定的 Id 得到它的值,比如这个 period:value..这样我就可以知道哪个值属于到哪个周期..
    【解决方案2】:

    你有没有尝试过:

    var vals = childrenNode.Element("series") 
               .Elements() 
               .Select(element => element.value);
    

    我会尝试在 Visual Studio 上运行它,但这应该可以。


    这应该满足你的要求:

    foreach (XmlNode seriesNode in nodes)
    {
    
        var valueNodes = seriesNode.ChildNodes;
        foreach (XmlNode valueAttribute in valueNodes)
        {
            var holdsYourValue = valueAttribute.Attributes["value"].Value;
            Console.Out.WriteLine("Value: " + holdsYourValue);
        }
    
        HttpContext.Current.Response.Write(childrenNode.SelectSingleNode
            ("//ResultSetHierarchy/object/measure.values/series/value").Value);    
    }
    

    【讨论】:

    • @Noctics .. 对不起,你能不能提供我上面所说的可以执行的示例示例,我是这个概念的新手,所以我无法在语法上正确地编程它,它给了我错误。
    • @Reshma 让我们知道错误是什么,Noctis 写的应该是正确的 LINQ to XML。
    • @Noctics.. 我收到 .Elements 错误,因为 System.XML.XMLNode 不包含元素的定义,并且找不到接受 System.XML.XMLNode 类型的第一个参数的扩展方法元素...看来我需要使用 XDocument 而不是 XMLDocument,您能否提供一段代码,它将使用 XDocument 并使用您解释的方法检索数据,
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-20
    • 1970-01-01
    • 2016-11-05
    相关资源
    最近更新 更多