繁体   English   中英

使用C#的Linq XML嵌套查询

[英]Linq xml nested query with c#

到目前为止,我可以显示

<group number=

<category number= 

我如何显示

<category label=每个类别的属性?

XML

<?xml version="1.0" encoding="UTF-8"?>
<outputTree xmlns="http://www.ibm.com/software/analytics/spss/xml/oms" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.ibm.com/software/analytics/spss/xml/oms http://www.ibm.com/software/analytics/spss/xml/oms/spss-output-1.8.xsd">
  <command command="Summarize" displayOutlineValues="label" displayOutlineVariables="label" displayTableValues="label" displayTableVariables="label" lang="en" text="Summarize">
    <pivotTable subType="Report" text="Batch Processing Report">
      <dimension axis="row" text="Cases">
        <group label="Test Site" text="Test Site" varName="PLANT_DESC" variable="true">
          <group hide="true" text="A">
            <group string="A" text="AA" varName="PLANT_DESC">
              <group label="Product" text="Product" varName="PROD_DESC" variable="true">
                <group hide="true" text="A">
                  <group string="S" text="S" varName="PROD_DESC">
                    <group label="Batch Number" text="Batch Number" varName="BATCH_NO" variable="true">
                      <group hide="true" text="A">
                        <group number="3704542" text="3704542" varName="BATCH_NO">
                          <category number="1" text="1">
                            <dimension axis="column" text="Variables">
                              <category label="Batch Run" text="Batch Run" varName="BATCH_RUN_ID" variable="true">
                                <cell number="4202" text="4202" varName="BATCH_RUN_ID"/>
                              </category>
                              <category label="Application" text="Application" varName="APP_ID" variable="true">
                                <cell label="Calibration" number="101" text="Calibration" varName="APP_ID"/>
                              </category>
                            </dimension>
                          </category>
                          <category number="2" text="2">
                            <dimension axis="column" text="Variables">
                              <category label="Batch Run" text="Batch Run" varName="BATCH_RUN_ID" variable="true">
                                <cell number="4341" text="4341" varName="BATCH_RUN_ID"/>
                              </category>
                              <category label="Application" text="Application" varName="APP_ID" variable="true">
                                <cell label="Range Setting" number="201" text="Range Setting" varName="APP_ID"/>
                              </category>
                            </dimension>
                          </category>
                        </group>
                      </group>
                    </group>
                  </group>
                </group>
              </group>
            </group>
          </group>
        </group>
      </dimension>
    </pivotTable>
  </command>
</outputTree>

C

private void GetXMLData1()
{
    try
    {
        XNamespace ns = "http://www.ibm.com/software/analytics/spss/xml/oms";
        XDocument testXML = XDocument.Load(@"C:\Users\byilmaz\Desktop\SPSS_SITE\test.xml");

        var cats = from cat in testXML.Descendants(ns + "dimension").Where
                   (cat => (string)cat.Attribute("axis") == "column" && (string)cat.Attribute("text") == "Variables")

                   select new
                       {
                           BATCH_NO = cat.Parent.Parent.Attribute("number").Value,
                           RUN_NO = cat.Parent.Attribute("number").Value,                                   
                       }
                       ;

        foreach (var cat in cats)
        {
            //xmlTitle.Text += "Group Name: " + cat.groupName + " and Cat Id: " + cat.catId + " and Cat Name: " + cat.catName + " and Cat Cell: " + cat.catCell + "</br>";

            xmlTitle.Text += "BATCH_NO: " + cat.BATCH_NO + " </br>";
            xmlTitle.Text += "RUN_NO: " + cat.RUN_NO + " </br><hr>";
        }

    }
    catch (Exception err)
    {
        throw (err);
    }
}

产量

在此处输入图片说明

您在一开始使用Descendants() ,为什么不也将它们用于类别?

select new
         {
             BATCH_NO = cat.Parent.Parent.Attribute("number").Value,
             RUN_NO = cat.Parent.Attribute("number").Value,
             InnerCategories = cat.Descendants(ns + "category").Select(c => c.Attribute("label").Value)
         };

然后在foreach循环中,您可以:

foreach (var cat in cats)
{
   //xmlTitle.Text += "Group Name: " + cat.groupName + " and Cat Id: " + cat.catId + " and Cat Name: " + cat.catName + " and Cat Cell: " + cat.catCell + "</br>";

     xmlTitle.Text += "BATCH_NO: " + cat.BATCH_NO + " </br>";
     xmlTitle.Text += "RUN_NO: " + cat.RUN_NO + " </br><hr>";


     foreach (string s in cat.InnerCategories )
     {
        // process them one by one 
     }

     // or print them at once

     string joinedInnerCats = string.Join(",", cat.InnerCategories);
     xmlTitle.Text += string.Format("Categories: {0}", joinedInnerCats);
 }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM