我有以下XML代码:
<dsPreventieRegisterItem xmlns="http://tempuri.org/dsPreventieRegisterItem.xsd">
<tblpreventieregisteritem>
<DatumInterventie>2015-06-14</DatumInterventie>
<TijdstipInterventie>11:30</TijdstipInterventie>
<HulpverlenerNaam>Vandenbroucke</HulpverlenerNaam>
<HulpverlenerVoornaam>Dirk</HulpverlenerVoornaam>
<HulpbehoefteAard>Vinger en pols bezeerd </HulpbehoefteAard>
<HulpbehoefteOorzaak>Ronddraaiende delen</HulpbehoefteOorzaak>
<GebodenHulp>aanbrengen van Cold pack </GebodenHulp>
<GebruikteMiddelen>Cold pack Ice spray Steunverband</GebruikteMiddelen>
<Opmerkingen />
<id>1</id>
</tblPreventieRegisterItem>
</tblpreventieregisteritem>
但是有多个tblPreventieRegisterItem元素。 这是在XElement中声明的。
然后我想把它放在IEnumerable<XElement>
列表中。
我遇到的问题是,orderby永远不会有效。
IEnumerable <XElement> items =
from el in root.Elements("tblpreventieregisteritem")
orderby Int32.Parse(el.Element("id").Value) descending
select el;
有想法的人吗?
答案 0 :(得分:2)
这是XML主题中的常见问题(常见问题)。 XML中的所有元素都在默认命名空间中,URI为XNamespace+ element's local-name
。您可以使用XNamespace d = "http://tempuri.org/dsPreventieRegisterItem.xsd";
IEnumerable <XElement> items =
from el in root.Elements(d+"tblpreventieregisteritem")
orderby (int)el.Element(d+"id") descending
select el;
的组合来引用命名空间中的元素,例如:
XElement
请注意,您可以直接将int
投射到XElement
,这是一种更简洁且更安全的方法,即如果问题var xml = @"<dsPreventieRegisterItem xmlns='http://tempuri.org/dsPreventieRegisterItem.xsd'>
<tblpreventieregisteritem>
<id>1</id>
</tblpreventieregisteritem>
<tblpreventieregisteritem>
<id>2</id>
</tblpreventieregisteritem>
<tblpreventieregisteritem>
<id>3</id>
</tblpreventieregisteritem>
</dsPreventieRegisterItem> ";
var root = XElement.Parse(xml);
XNamespace d = "http://tempuri.org/dsPreventieRegisterItem.xsd";
IEnumerable<XElement> items =
from el in root.Elements(d + "tblpreventieregisteritem")
orderby (int)el.Element(d + "id") descending
select el;
foreach (var item in items)
{
Console.WriteLine(item.Element(d + "id").ToString());
}
不是找到。
<id xmlns="http://tempuri.org/dsPreventieRegisterItem.xsd">3</id>
<id xmlns="http://tempuri.org/dsPreventieRegisterItem.xsd">2</id>
<id xmlns="http://tempuri.org/dsPreventieRegisterItem.xsd">1</id>
输出
UIImage
答案 1 :(得分:0)
你试过这个吗:
XNamespace ns = "http://tempuri.org/dsPreventieRegisterItem.xsd";
IEnumerable<XElement> items =
from rootElement in root.Elements("{" + ns + "}" + "dsPreventieRegisterItem")
from el in rootElement.Elements("{" + ns + "}" + "tblpreventieregisteritem")
orderby Int32.Parse(el.Element("{" + ns + "}" + "id").Value) descending
select el;