问题描述
|
我想选择一个的所有元素
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);
}
}