Linq to XML orderby子元素

时间:2016-03-09 13:14:04

标签: c# xml linq

我有以下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;

有想法的人吗?

2 个答案:

答案 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()); } 不是找到。

working demo example :

<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;