[英]Linq xml nested query with c#
到目前为止,我可以显示
<group number=
和
<category number=
我如何显示
<category label=
每个类别的属性?
<?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>
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.