C# 将分层Linq解析为XML
我正在尝试分析此数据:C# 将分层Linq解析为XML,c#,linq,xml-parsing,C#,Linq,Xml Parsing,我正在尝试分析此数据: <Product> <ProductName>Climate Guard</ProductName> <Tag>ClimateGuard</Tag> <SupportPage>~/Support/ClimateGuard.aspx</SupportPage> <ProductPage>~/Products/ClimateGuard.asp
<Product>
<ProductName>Climate Guard</ProductName>
<Tag>ClimateGuard</Tag>
<SupportPage>~/Support/ClimateGuard.aspx</SupportPage>
<ProductPage>~/Products/ClimateGuard.aspx</ProductPage>
<ProductCategories>
<ProductCategory>Climate Guard</ProductCategory>
<PartNumbers>
<PartNumber Primary="true">CLIMATE GUARD</PartNumber>
<PartNumber>CLIMATEGUARD LT</PartNumber>
<PartNumber>CLIMATE GUARD STARTER KIT</PartNumber>
<PartNumber>SENSOR MODULE</PartNumber>
<PartNumber>SWCH INP MODULE</PartNumber>
<PartNumber>TEMP SENSOR</PartNumber>
<PartNumber>HUMIDITY SENSOR</PartNumber>
<PartNumber>DOOR CONTACT</PartNumber>
<PartNumber>MOTION SENSOR</PartNumber>
<PartNumber>FLOOD DETECTOR</PartNumber>
<PartNumber>SMOKE DETECTOR</PartNumber>
<PartNumber>TILT SENSOR</PartNumber>
<PartNumber>SENSOR CABLE</PartNumber>
<PartNumber>PWR INP CABLE</PartNumber>
<PartNumber>100FT 2-WIRE</PartNumber>
<PartNumber>RJ25 COUPLER</PartNumber>
</PartNumbers>
</ProductCategories>
<Downloads>
<Download>
<Version>1.0.27</Version>
<Url>~/Files/Downloads/ClimateGuard_Firmware_1_0_27.bin</Url>
<Comment>Firmware</Comment>
</Download>
<Download>
<Version>1.0.6</Version>
<Url>~/Files/Downloads/ClimateGuard_BuiltInModule_1_0_6.bin</Url>
<Comment>Built-in Module</Comment>
</Download>
<Download>
<Version>1.0.2</Version>
<Url>~/Files/Downloads/ClimateGuard_SensorModule_1_0_2.bin</Url>
<Comment>Sensor Module</Comment>
</Download>
<Download>
<Version>1.0.0</Version>
<Url>~/Files/Downloads/ClimateGuard_SwitchInputModule_1_0_0.bin</Url>
<Comment>Switch Input Module</Comment>
</Download>
</Downloads>
</Product>
气候卫士
气候卫士
~/Support/ClimateGuard.aspx
~/Products/ClimateGuard.aspx
气候卫士
气候卫士
气候守卫
气候防护起动套件
传感器模块
SWCH-INP模块
温度传感器
湿度传感器
门触点
运动传感器
洪水探测器
烟雾探测器
倾斜传感器
传感器电缆
压水堆INP电缆
100英尺双线
RJ25耦合器
1.0.27
~/Files/Downloads/ClimateGuard\u固件\u 1\u 0\u 27.bin
固件
1.0.6
~/Files/Downloads/ClimateGuard\u BuiltInModule\u 1\u 0\u 6.bin
内置模块
1.0.2
~/Files/Downloads/ClimateGuard\u传感器模块\u 1\u 0\u 2.bin
传感器模块
1.0.0
~/Files/Downloads/ClimateGuard\u SwitchInputModule\u 1\u 0\u 0.bin
开关输入模块
我正在尝试获取零件号列表,但是,只有第一个出现:
产品类别气候防护装置
零件号气候防护装置
我的零件号代码有什么问题:
public List<Products> GetProducts()
{
XElement myElement = XElement.Load(HttpContext.Current.Server.MapPath("~/App_Data/products.xml"));
var query = from a in myElement.Elements("Product")
select new Products
{
ProductName = a.Element("ProductName").Value,
Tag = a.Element("Tag").Value,
SupportPage = a.Element("SupportPage").Value,
ProductPage = a.Element("ProductPage").Value,
ProductCategories = from b in a.Elements("ProductCategories")
select new ProductCategories
{
ProductCategory = b.Element("ProductCategory").Value,
//PartNumbers = GetPartNumbers(myElement.Elements("Product").Elements("ProductCategories").Elements("PartNumbers").Elements("PartNumber"))
PartNumbers = from c in b.Elements("PartNumbers")
select new PartNumbers
{
PartNumber = c.Element("PartNumber").Value
}
},
Downloads = from bb in a.Elements("Downloads").Elements("Download")
select new Downloads
{
Comment = bb.Element("Comment").Value,
Url = bb.Element("Url").Value,
Version = bb.Element("Version").Value
},
};
return query.ToList();
}
public List GetProducts()
{
XElement myElement=XElement.Load(HttpContext.Current.Server.MapPath(“~/App_Data/products.xml”);
var query=来自myElement.Elements(“产品”)中的
选择新产品
{
ProductName=a.Element(“ProductName”).Value,
标记=一个元素(“标记”).值,
SupportPage=a.Element(“SupportPage”).值,
ProductPage=a.Element(“ProductPage”).Value,
ProductCategories=来自a.Elements中的b(“ProductCategories”)
选择新产品类别
{
ProductCategory=b.元素(“ProductCategory”).值,
//零件号=获取零件号(myElement.Elements(“产品”).Elements(“产品类别”).Elements(“零件号”).Elements(“零件号”))
零件号=来自b元素中的c(“零件号”)
选择新零件号
{
零件号=c.元素(“零件号”).值
}
},
下载=从bb下载a.Elements(“下载”).Elements(“下载”)
选择新下载
{
注释=bb.元素(“注释”).值,
Url=bb.Element(“Url”).Value,
版本=bb.元素(“版本”).值
},
};
返回query.ToList();
}
所有类型(ProductName、标记等)都是字符串。零件号是一个IEnumerable。您可能忘记了
产品类别的ToList()
,零件号
和下载
public List<Products> GetProducts()
{
XElement myElement = XElement.Load(HttpContext.Current.Server.MapPath("~/App_Data/products.xml"));
var query = from a in myElement.Elements("Product")
select new Products
{
ProductName = a.Element("ProductName").Value,
Tag = a.Element("Tag").Value,
SupportPage = a.Element("SupportPage").Value,
ProductPage = a.Element("ProductPage").Value,
ProductCategories = (from b in a.Elements("ProductCategories")
select new ProductCategories
{
ProductCategory = b.Element("ProductCategory").Value,
//PartNumbers = GetPartNumbers(myElement.Elements("Product").Elements("ProductCategories").Elements("PartNumbers").Elements("PartNumber"))
PartNumbers = (from c in b.Elements("PartNumbers")
select new PartNumbers
{
PartNumber = c.Element("PartNumber").Value
}).ToList()
}).ToList(),
Downloads = (from bb in a.Elements("Downloads").Elements("Download")
select new Downloads
{
Comment = bb.Element("Comment").Value,
Url = bb.Element("Url").Value,
Version = bb.Element("Version").Value
}).ToList(),
};
return query.ToList();
}
public List GetProducts()
{
XElement myElement=XElement.Load(HttpContext.Current.Server.MapPath(“~/App_Data/products.xml”);
var query=来自myElement.Elements(“产品”)中的
选择新产品
{
ProductName=a.Element(“ProductName”).Value,
标记=一个元素(“标记”).值,
SupportPage=a.Element(“SupportPage”).值,
ProductPage=a.Element(“ProductPage”).Value,
ProductCategories=(来自a.Elements中的b(“ProductCategories”)
选择新产品类别
{
ProductCategory=b.元素(“ProductCategory”).值,
//零件号=获取零件号(myElement.Elements(“产品”).Elements(“产品类别”).Elements(“零件号”).Elements(“零件号”))
零件号=(来自b.Elements中的c(“零件号”)
选择新零件号
{
零件号=c.元素(“零件号”).值
})托利斯先生()
}).ToList(),
下载=(从bb中的a.Elements(“下载”).Elements(“下载”)
选择新下载
{
注释=bb.元素(“注释”).值,
Url=bb.Element(“Url”).Value,
版本=bb.元素(“版本”).值
}).ToList(),
};
返回query.ToList();
}
您可能忘记了产品类别
、零件号
和下载
的ToList()
public List<Products> GetProducts()
{
XElement myElement = XElement.Load(HttpContext.Current.Server.MapPath("~/App_Data/products.xml"));
var query = from a in myElement.Elements("Product")
select new Products
{
ProductName = a.Element("ProductName").Value,
Tag = a.Element("Tag").Value,
SupportPage = a.Element("SupportPage").Value,
ProductPage = a.Element("ProductPage").Value,
ProductCategories = (from b in a.Elements("ProductCategories")
select new ProductCategories
{
ProductCategory = b.Element("ProductCategory").Value,
//PartNumbers = GetPartNumbers(myElement.Elements("Product").Elements("ProductCategories").Elements("PartNumbers").Elements("PartNumber"))
PartNumbers = (from c in b.Elements("PartNumbers")
select new PartNumbers
{
PartNumber = c.Element("PartNumber").Value
}).ToList()
}).ToList(),
Downloads = (from bb in a.Elements("Downloads").Elements("Download")
select new Downloads
{
Comment = bb.Element("Comment").Value,
Url = bb.Element("Url").Value,
Version = bb.Element("Version").Value
}).ToList(),
};
return query.ToList();
}
public List GetProducts()
{
XElement myElement=XElement.Load(HttpContext.Current.Server.MapPath(“~/App_Data/products.xml”);
var query=来自myElement.Elements(“产品”)中的
选择新产品
{
ProductName=a.Element(“ProductName”).Value,
标记=一个元素(“标记”).值,
SupportPage=a.Eleme
PartNumbers = new PartNumbers {
Numbers = b.Element("PartNumbers").Elements()
.Select(c => (string)c).ToList()
}
PartNumbers = b.Element("PartNumbers").Elements().Select(c => (string)c).ToList()