LINQ TO XML检索子元素值

时间:2015-08-05 18:59:44

标签: c# xml linq

我有以下XML

<ABC xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://ns.hr-xml.org/2007-04-15">
    <ReceiptId>
        <IdValue>123</IdValue>
    </ReceiptId>
    <ClientOrderId>
        <IdValue>345</IdValue>
    </ClientOrderId>
    <AccessPoint>
        <Description>My Description</Description>
    </AccessPoint>
    <ABCStatus>
        <Status>Error</Status>
        <Details>ERRORS:
 Talent is already in an active process for this opening.
        </Details>
        <StatusDate>2015-08-05</StatusDate>
    </ABCStatus>
</ABC>

我正在尝试检索嵌套在IdValue和ClientOrderId中的元素值345

我在C#中使用了Linq to xml代码来检索没有运气的值

XDocument XMLResults = XDocument.Parse(sResult);

var sClientOrderID =
        from nodeAElem in XMLResults.Root.Elements("ABC")
        from nodeA1Elem in nodeAElem.Elements("ClientOrderId")
        from nodeA11Elem in nodeA1Elem.Elements("IdValue")
        select nodeA11Elem.Value;

还需要检索Status Elements值,该值是上述xml的错误。

非常感谢任何帮助

1 个答案:

答案 0 :(得分:0)

  1. 您的XML文档正在使用命名空间,您必须在查询中使用它才能使其正常工作。
  2. Root已将您带到ABC元素,因此您不必致电Elements("ABC")
  3. 您正在寻找单一价值,因此您可能希望使用Element代替Elements
  4. var ns = (XNamespace)"http://ns.hr-xml.org/2007-04-15";
    var sClientOrderID = (int)XMLResults.Root
                                        .Element(ns + "ClientOrderId")
                                        .Element(ns + "IdValue");