如何使用具有多个下拉列表的多字段foreach XML [英] How do I use multible foreach XML with multible dropdowns

查看:77
本文介绍了如何使用具有多个下拉列表的多字段foreach XML的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的xml文件有问题,我有一个由自行车组成的xml文件。对于每种自行车类型,都有不同的尺寸。然后我将制作两个下拉菜单。哪一个是自行车,另一个是那辆自行车的尺寸。

它可以很好地阅读自行车类型,但当我尝试读取适合自行车的尺寸时,它会读取所有尺寸进入下拉列表,而不是适合自行车的那些。我添加了我的C#和xml文件



Hi, I have a problem with my xml file, I have an xml file consisting of bikes. And for each bike type, there are different sizes. And I will then make two dropdown menus. Where one is bicycles and in the next are the sizes available for that bike.
It works fine to read the bike types, but when I try to read the sizes that fit the bike, it reads all sizes into the dropdown, rather than those that fit the bike. I have added my C # and xml file

DropDownList ddl = new DropDownList();
ddl.CssClass = "";
ddl.ID = "ddlBike" + i;
ddl.Items.Add(new ListItem("Vælg cykel", "0"));


DropDownList ddlSize = new DropDownList();
ddlSize.CssClass = "";
ddlSize.ID = "ddlSize" + i;

ddlSize.Items.Add(new ListItem("Højde", "0"));





XmlNodeList nodeList = doc.SelectNodes("InfoBikeResponse/BikeTypes/BikeType");

foreach (XmlNode node in nodeList)
{

    ddl.Items.Add(new ListItem(node["Id"].InnerText + HttpUtility.HtmlDecode("  ") + "" + HttpUtility.HtmlDecode("  ") + node["TypeName"].InnerText + ""));
    ddl.ClearSelection();

    XmlNodeList nodeListSize = node.SelectNodes("Sizes/Size");


    foreach (XmlNode nodeSize in nodeListSize)
    {
        ddlSize.Items.Add(new ListItem(nodeSize["SizeId"].InnerText + HttpUtility.HtmlDecode("  ") + "" + HttpUtility.HtmlDecode("  ") + nodeSize["SizeName"].InnerText, nodeSize["SizeCount"].InnerText + ""));
        ddlSize.ClearSelection();

    }

}













<InfoBikeResponse>
  <BikeTypes>
    <BikeType>
      <Id>1</Id>
      <TypeName>Classic</TypeName>
      <TypeCount/>
      <TypePrice>150,00</TypePrice>
      <TypePriceVat>187,50</TypePriceVat>
      <Sizes>
        <Size>
          <SizeId>10</SizeId>
          <SizeName>155-167</SizeName>
          <SizeCount>2</SizeCount>
        </Size>
        <Size>
          <SizeId>11</SizeId>
          <SizeName>168-172</SizeName>
          <SizeCount>1</SizeCount>
        </Size>
        <Size>
          <SizeId>12</SizeId>
          <SizeName>173-185</SizeName>
          <SizeCount>1</SizeCount>
        </Size>
      </Sizes>
    </BikeType>
    <BikeType>
      <Id>2</Id>
      <TypeName>Sport Bike</TypeName>
      <TypeCount/>
      <TypePrice>185,00</TypePrice>
      <TypePriceVat>231,25</TypePriceVat>
      <Sizes>
        <Size>
          <SizeId>20</SizeId>
          <SizeName>155-167</SizeName>
          <SizeCount>2</SizeCount>
        </Size>
        <Size>
          <SizeId>21</SizeId>
          <SizeName>168-172</SizeName>
          <SizeCount>3</SizeCount>
        </Size>
      </Sizes>
    </BikeType>
    <BikeType>
      <Id>3</Id>
      <TypeName>MTB</TypeName>
      <TypeCount/>
      <TypePrice>220,00</TypePrice>
      <TypePriceVat>275,00</TypePriceVat>
      <Sizes>
        <Size>
          <SizeId>40</SizeId>
          <SizeName>155-167</SizeName>
          <SizeCount>1</SizeCount>
        </Size>
        <Size>
          <SizeId>41</SizeId>
          <SizeName>168-172</SizeName>
          <SizeCount>1</SizeCount>
        </Size>
      </Sizes>
    </BikeType>
    <BikeType>
      <Id>4</Id>
      <TypeName>Classic E</TypeName>
      <TypeCount/>
      <TypePrice>170,00</TypePrice>
      <TypePriceVat>212,50</TypePriceVat>
      <Sizes>
        <Size>
          <SizeId>51</SizeId>
          <SizeName>168-172</SizeName>
          <SizeCount>2</SizeCount>
        </Size>
      </Sizes>
    </BikeType>
  </BikeTypes>





我尝试过:



Linq,Xpath和不同类型的Google解决方案



What I have tried:

Linq, Xpath and Different kind of Google Solutions

推荐答案

我建​​议使用XDocument class [ ^ ]。请参阅:



I'd suggest to use XDocument class[^]. See:

string biketype = "Classic";

XDocument xdoc = XDocument.Load(<xml_stream_here>);
var bikeSizes = xdoc.Descendants("BikeType")
	.Where(x=>x.Element("TypeName").Value == biketype)
	.SelectMany(x=>x.Descendants("SizeName").Select(y=>y.Value))
	.ToList();

foreach(string s in bikeSizes)
{
	Console.WriteLine("{0}", s);
}





详情请见:

LINQ to XML(C#)| Microsoft Docs [ ^ ]


这篇关于如何使用具有多个下拉列表的多字段foreach XML的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆