加载xml文件并使用c#获取所需的数据
本文关键字:获取 数据 xml 文件 加载 | 更新日期: 2023-09-27 18:25:00
这是我第一次使用xml文件,我不知道自己在做什么。
这是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="UK" text="Scotland" varName="_DESC">
<group label="Product" text="Product" varName="PROD_DESC" variable="true">
<group hide="true" text="A">
<group string="NameProduct" text="Name" varName="PROD_DESC">
<group label="Batch Number" text="Batch Number" varName="BATCH_NO" variable="true">
<group hide="true" text="A">
<group number="3692649" text="3692649" varName="BATCH_NO">
<category number="1" text="1">
<dimension axis="column" text="Variables">
<Test ID="1"/>
<Test ID="2"/>
<category label="Batch Run" text="Batch Run" varName="BATCH_RUN_ID" variable="true">
<cell number="4242" text="4242" 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>
<category label="Date Tested" text="Date Tested" varName="TEST_DATE" variable="true">
<cell date="2014-09-24T10:17:04" format="date" text="24-SEP-2014" varName="TEST_DATE"/>
</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="4256" text="4256" 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>
<category label="Date Tested" text="Date Tested" varName="TEST_DATE" variable="true">
<cell date="2014-09-24T10:53:12" format="date" text="24-SEP-2014" varName="TEST_DATE"/>
</category>
</dimension>
</category>
</group>
</group>
</group>
</group>
</group>
</group>
</group>
</group>
</group>
</dimension>
</pivotTable>
</command>
</outputTree>
我刚刚在xml文件中添加了测试类别<Test ID="1"/>
,看看我是否可以获得任何数据,并且它非常完美。
var doc = XDocument.Load(@"C:'Users'by'Desktop'SITE's.xml");
XNamespace rss = "http://www.ibm.com/software/analytics/spss/xml/oms";
foreach (var item in doc.Descendants(rss + "Test"))
{
xmlTitle.Text += "</br>" + item.Attribute("ID").Value + " </br>";
}
我的问题是:
我怎么能把所有东西都放在下面:
<group label="Batch Number" text="Batch Number" varName="BATCH_NO" variable="true">
假设您希望group
元素下的所有元素都具有这些精确的属性/值,那么这样的东西就足够了:
var result = doc.Descendants(rss + "group")
.Single(e => e.Attribute("label") != null
&& e.Attribute("label") == "Batch Number"
&& e.Attribute("text") != null
&& e.Attribute("text") == "Batch Number"
&& /* ... */)
.Descendants();
注意:这假设正好存在一个这样的元素(否则Single()
将抛出异常)。
使用以下代码:
var node = doc.XPathSelectElement("//group[@label='Batch Number']");
foreach (var item in node.Descendants())
{
//sb.Append(item);
}
我设法解决了我的问题,但花了大约1天的时间。我必须从根到底编写每个元素,并包含名称空间。
private void GetXMLData()
{
try
{
xmlTitle.Text = "";
XNamespace ns = "http://www.ibm.com/software/analytics/spss/xml/oms";
XDocument testXML = XDocument.Load(@"C:'Users'by'Desktop'SITE'ori.xml");
var cats = from cat in testXML.Element(ns + "outputTree")
.Elements(ns + "command")
.Elements(ns + "pivotTable")
.Elements(ns + "dimension")
.Elements(ns + "group")
.Elements(ns + "group")
.Elements(ns + "group")
.Elements(ns + "group")
.Elements(ns + "group")
.Elements(ns + "group")
.Elements(ns + "group")
.Elements(ns + "group")
.Elements(ns + "group")
.Elements(ns + "category")
select new
{
parentC = cat.Parent.Attribute("number").Value,
id = cat.Attribute("number").Value,
};
foreach (var cat in cats)
{
xmlTitle.Text += "</br>Parent: " + cat.parentC + " and ";
xmlTitle.Text += "Cat: " + cat.id + " </br>";
}
}
catch (Exception err)
{
throw (err);
}
}