Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将分层Linq解析为XML_C#_Linq_Xml Parsing - Fatal编程技术网

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()