如何阅读ChildNode

时间:2016-05-26 06:47:34

标签: c# xml linq

我真的需要帮助。我无法解决它。 我想从Xml文件中读取数据。 这是Xml文件

<ARTICLE>
    <ARTICLE_FEATURES>
                <REFERENCE_FEATURE_SYSTEM_NAME>ECLASS-5.1</REFERENCE_FEATURE_SYSTEM_NAME>
                <FEATURE>
                    <FNAME>Verpackungseinheit</FNAME>
                    <FVALUE>100</FVALUE>
                    <FUNIT>Box</FUNIT>
                </FEATURE>
                <FEATURE>
                    <FNAME>Farbe</FNAME>
                    <FVALUE>weiss</FVALUE>
                </FEATURE>
                <FEATURE>
                    <FNAME>Material</FNAME>
                    <FVALUE>Latex gepudert</FVALUE>
                </FEATURE>
</ARTICLE>
我正在读这样的

 var productQuery = (from p in xmlDocument.Descendants("ARTICLE")
                                select new
                                {
                                    Names = p.Element("ARTICLE_FEATURES").Elements("FEATURE").Select(s => s.Element("FNAME").Value)
                                    groupName = (p.Element("ARTICLE_FEATURES").Elements("FEATURE").Count() > 0) ? p.Element("ARTICLE_FEATURES").Elements("FEATURE").Select(s => s.Value) :
                                    value = (p.Element("ARTICLE_FEATURES").Elements("FEATURE").Count() > 0) ? p.Element("ARTICLE_FEATURES").Element("FEATURE").Element("FVALUE").Value : string.Empty
};

但它不起作用,并且某些产品中没有这些元素(FEATURE)因此必须检查是否。有多个元素也适用于产品如果我使用内联运算符在这种情况下我不知道如何做其他部分。

  

我再次写了同样的内容,以表明我是如何做到的。 (姓名==   groupName)

1 个答案:

答案 0 :(得分:2)

您可以使用LinqXml执行此操作。

XDocument doc = XDocument.Parse(input);

var results = doc.Descendants("ARTICLE_FEATURES")   //look for descendants
                  .Select(x=>new 
                   {
                       Names = x.Elements("FEATURE").Select(e=>e.Element("FNAME").Value).ToList(),  // look for nested eleements.
                       Value = x.Elements("FEATURE").Select(e=>e.Element("FVALUE").Value).ToList(),
                   });

选中此Demo