Martin Lauritsen Ответов: 1

Как я могу использовать многодисковый формате XML по каждому элементу с выпадающих меню многодисковый


Привет, у меня есть проблема с моим xml-файлом, у меня есть xml-файл, состоящий из велосипедов. И для каждого типа велосипеда существуют разные размеры. И тогда я сделаю два выпадающих меню. Где один-это велосипеды, а в следующем-размеры, доступные для этого велосипеда.
Он отлично работает для чтения типов велосипедов, но когда я пытаюсь прочитать размеры, которые подходят для велосипеда, он считывает все размеры в выпадающий список, а не те, которые подходят для велосипеда. Я добавил свой файл C # и xml

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

j snooze

You can't fill the second drop down without knowing what bike they selected. You need to fill the second drop down based off of the bikes selected index change or something likethat. Currently your query is telling the xml to give you all the Size element tags for every bike. First query the bike nodes (use SelectSingleNode where the id tag is whatever number they selected lookup xpath expressions for exact syntax) then once you have just the bike node they selected, you can use an xpath query on that node to query the sizes inside that node. Is that what you are looking for? This is a multiple step process, if I understand what you are trying to do.

Martin Lauritsen

Чтобы дать еще немного объяснения, я создаю HTML-таблицу на лету на основе числа в текстовом поле. Когда я отправляю на сервер, я также получаю xml, который вы видите. Поэтому я хотел бы, чтобы было возможно заполнить второй выпадающий список при его создании. Я загружаю изображение, на этом снимке вы можете видеть строки, которые я сделал на лету.

Martin Lauritsen

http://i64.tinypic.com/2qv8ei1.png

RickZeeland

Это ваш вопрос о ASP.NET -что ?

1 Ответов

Рейтинг:
12

Maciej Los

Я бы предложил использовать Класс XDocument[^]. Видеть:

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[^]


Martin Lauritsen

Большое вам спасибо, проблема теперь в том, что он добавляет его ко всем моим выпадающим спискам. Я занимаюсь созданием динамических элементов управления, поэтому, если я сделал 7 строк, он помещает их во все из них. Поэтому мне нужно найти конкретный индекс строки, где был выбран classic. Но спасибо, меня направили в правильном направлении :)

Maciej Los

Всегда пожалуйста.
Если мой ответ был полезен, пожалуйста, отметьте его как ответ (зеленая кнопка).

Martin Lauritsen

Проблема не совсем исправлена :) но сойдет