读取表中的XML表

时间:2013-09-26 09:30:30

标签: c# xml nested-lists

我有以下XML,我认为这完全有效:

<Controls>
  <ComboBox>
    <ControlName>cbInputType</ControlName>
    <ControlText>Input Type</ControlText>
    <EnumDefault>2</EnumDefault>
    <EnumList value="0">
      <EnumText>Type A</EnumText>
      <EnumLegend>TA</EnumLegend>
    </EnumList>
    <EnumList value="1">
      <EnumText>Type B</EnumText>
      <EnumLegend>TB</EnumLegend>
    </EnumList>
    <EnumList value="2">
      <EnumText>Type C</EnumText>
      <EnumLegend>TC</EnumLegend>
    </EnumList>
  </ComboBox>
  <ComboBox>
    <ControlName>cbDecimalPlace</ControlName>
    <ControlText>Decimal Place</ControlText>
    <EnumDefault>1</EnumDefault>
    <EnumList value="0">
      <EnumText>0dp (1234)</EnumText>
      <EnumLegend>0000</EnumLegend>
    </EnumList>
    <EnumList value="1">
      <EnumText>1dp (123.4)</EnumText>
      <EnumLegend>000.0</EnumLegend>
    </EnumList>
  </ComboBox>
</Controls>

这个想法是它指定了两个“ComboBox”控件中包含的内容。在XML中使用EnumList定义应该使用定义的3个项目(类型A,类型B和类型C)填充第一个ComboBox,并使用2个项目(0dp和1dp)填充第二个ComboBox。 我正在使用ReadXml方法将XML读入数据集。

现在提出问题: 我可以访问数据集中的表,但是如果我访问ComboBox表,该表正确包含每个表的初始数据,那么其中没有EnumList。我也可以访问表EnumList,但它包含文件中的所有枚举,因此它们似乎与特定的ComboBox实例无关。

部分问题可能是我没有正确读取数据。我基本上在做:

DataSet ds = ReadXML("myxmltable.xml");
DataTable dt = ds.Tables["ComboBox"];
dataGridView1.DataSource = dt;

这使我的DGV只填充每个ComboBox定义中的前3个项目,而不是enumList。并且尝试调试数据集对象时,我看不到有关EnumLists的任何信息。

如果我将上例中的第二行代码更改为:

DataTable dt = ds.Tables["EnumList"];

我得到了整个文件中的所有enumlists,所以我看不出它们与哪个组合框有关。

我无法相信ReadXML函数会像我定义的那样扁平化结构,因为这会破坏XML的要点,所以我想我必须使用它错误?

有什么想法吗?

0 个答案:

没有答案