Linq to XML使用linq读取xml文件

swa*_*eel 5 c# linq-to-xml

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE Report SYSTEM "https://abc.mycompany.com/abc/processingreports/processeddtd/abcd_1_8.dtd">
<Report Name="Daily TRANSACTIONS"
        Version="1.8"
        xmlns="https://abc.mycompany.com/abc/processingreports/processeddtd/abcd_1_8.dtd"
        OrgID="ABC_PQR" StartDate="2011-03-10T00:00:00+00:00" EndDate="2011-03-11T00:00:00+00:00">
    <Requests>
        <Request ID="2"
                 Date="2011-03-10T00:21:14+00:00"
                 OrderNumber="1">
            <BillTo>
                <FirstName />
            </BillTo>
            <LineItems>
                <LineItem Number="0">
                    <Quantity />
                </LineItem>
            </LineItems>
        </Request>
        <Request ID="2"
                 Date="2011-03-10T00:21:14+00:00"
                 OrderNumber="1">
                 TransactionNumber="389958330911111">
            <BillTo>
                <FirstName>A</FirstName>
            </BillTo>
            <LineItems>
                <LineItem Number="0">
                    <Quantity>1</Quantity>
                </LineItem>
            </LineItems>
            <UniqueData>
                <UniqueNumber>11111111111111111111111111111</UniqueNumber>
            </UniqueData></Request></Requests></Report>
Run Code Online (Sandbox Code Playgroud)

在使用Linq的上述XML文件中,我只想提取OrderNumber和UniqueNumber OrderNumber ="1"11111111111111111111111111111

提出这些细节的任何想法,建议?

我可以从上面的xml文件中选择元素,但UniqueNumber不与OrderNumber相关联

我正在寻找下面的内容(忽略UniqueNumber不存在的行)OrderNumber - assosicated UniqueNumber

更新 在"requiredElements"中,我期待两个coulmns OrderNumber和UniqueNumber,并将相关值保持为1和11111,因此一个

 #region FileOpen with UTF8 Encoding

 TextReader sr = new StreamReader(cFileName, Encoding.UTF8);
 XDocument reportfile = XDocument.Load(sr, LoadOptions.SetBaseUri);
 XElement xd = XElement.Parse(reportfile.ToString());
 sr.Close();


 #endregion

 XNamespace ns = xd.Attribute("xmlns").Value;

 var requiredElements = (from resultquery in reportfile.Descendants()
                          select new
                          {
                             OrderNumber = resultquery.Attribute("OrderNumber"),
                             UniqueNumber= (string)resultquery.Element(AddNameSpace(ns, "UniqueNumber")),
                          }
                      );
Run Code Online (Sandbox Code Playgroud)

Mar*_*nen 10

这是一些示例:

    XDocument doc = XDocument.Load(@"file.xml");
    XNamespace df = doc.Root.Name.Namespace;
    var results = from request in doc.Descendants(df + "Request")
                  where request.Elements(df + "UniqueData").Elements(df + "UniqueNumber").Any()
                  select new
                  {
                      ordNumber = (int)request.Attribute("OrderNumber"),
                      uniqueNumber = (decimal)request.Element(df + "UniqueData").Element(df + "UniqueNumber")
                  };
    foreach (var result in results)
    {
        Console.WriteLine("{0}-{1}", result.ordNumber, result.uniqueNumber);
    }
Run Code Online (Sandbox Code Playgroud)