微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

IEnumerable <XElement>和foreach

如何解决IEnumerable <XElement>和foreach

| 我想选择一个的所有元素
var q = from artikel in xmlSource.Descendants(\"ART\")
    where artikel.Element(\"ID\").Value.Equals(\"15\")
    select artikel.Elements();

 //Does not work
 foreach (var element in q)
 {
    Console.WriteLine(\"Customer name = {0}\",element.Name);
 }
如何输出所有元素?迭代器存在一些问题。 我现在不怎么迭代     IEnumerable 使用foreach并访问element.Name属性。 // ***附加信息// XML示例
<ARTICLE>
  <ART>
    <ID>0020209</ID>
    <EXP>36</EXP>
    <QTY>1</QTY>
    <SMCAT>B</SMCAT>
    <DSCRD>Example Description 1</DSCRD>
    <ARTCOMP>
      <COMPNO>10710</COMPNO>
      <ROLE>H</ROLE>
      <ARTNO1>320059</ARTNO1>
      <ARTNO2>320059</ARTNO2>
    </ARTCOMP>
    <ARTCOMP>
      <COMPNO>10710</COMPNO>
      <ROLE>V</ROLE>
      <ARTNO1>320059</ARTNO1>
      <ARTNO2>320059</ARTNO2>
    </ARTCOMP>
    <ARTBAR>
      <CDTYP>E13</CDTYP>
      <BC>7680202580475</BC>
      <BCSTAT>A</BCSTAT>
    </ARTBAR>
    <ARTPRI>
      <VDAT>2010-12-01T00:00:00+01:00</VDAT>
      <PTYP>PEXF</PTYP>
      <PRICE>30</PRICE>
    </ARTPRI>
  </ART>
  <ART>
    <ID>0020244</ID>
    <EXP>60</EXP>
    <QTY>30</QTY>
    <DSCRD>FERRO GRADUMET Depottabl 30 Stk</DSCRD>
    <ARTCOMP>
      <COMPNO>1836</COMPNO>
      <ROLE>H</ROLE>
      <ARTNO1>685230</ARTNO1>
      <ARTNO2>685230</ARTNO2>
    </ARTCOMP>
    <ARTCOMP>
      <COMPNO>1836</COMPNO>
      <ROLE>V</ROLE>
      <ARTNO1>685230</ARTNO1>
      <ARTNO2>685230</ARTNO2>
    </ARTCOMP>
    <ARTCOMP>
      <COMPNO>5360</COMPNO>
      <ROLE>L</ROLE>
      <ARTNO1>685230</ARTNO1>
      <ARTNO2>685230</ARTNO2>
    </ARTCOMP>
  </ART>
</ARTICLE>
我必须将此XML文件导入到规范化的MysqL表中。 ARTCOMP / ARTBAR是MysqL Datebase中的其他表。 首先,我想在一个空的MysqL表中将所有字段创建为varchar()。另一个问题是,并非每个ART元素都具有相同的子元素。也许有一种更好的方法来查找所有可能的子元素(某种模式)。     

解决方法

您的
select
子句意味着
q
的类型实际上是
IEnumerable<IEnumerable<XElement>>
。我怀疑你的意思是:
var q = from artikel in xmlSource.Descendants(\"ART\")
        where artikel.Element(\"ID\").Value.Equals(\"15\")
        from element in artikel.Elements()
        select element;
要么:
var q = from artikel in xmlSource.Descendants(\"ART\")
        where (string) artikel.Element(\"ID\") == \"15\"
        from element in artikel.Elements()
        select element;
甚至:
var q = from artikel in xmlSource.Descendants(\"ART\")
        where (int) artikel.Element(\"ID\") == 15
        from element in artikel.Elements()
        select element;
这将使
q
的类型仅为
IEnumerable<XElement>
-基本上它将使结果平坦。您将获得所有元素的序列,这些元素都位于名为“ ART”的元素的正下方,该元素又具有值为15的“ ID”元素。 如果这不是您想要的,请提供更多信息-理想情况下,请提供示例XML文件以及预期的输出。 不过,您似乎不太可能真的要打印所有元素的元素名称...客户名称应作为值存储在某个位置(元素内的文本或属性),而不是元素名称。 编辑:如果要使用
IEnumerable<IEnumerable<XElement>>
,可以使用:
foreach (var result in q)
{
    Console.WriteLine(\"Next result...\");
    foreach (var element in result)
    {
        Console.WriteLine(\"Got name: {0}\",element.Name);
    }
}
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。