C#XML)如何获取特定标签内的值?

时间:2016-05-10 05:39:51

标签: c# xml linq parsing tags

我尝试过类似下面的方法,但是他们没有显示出NullReferenceException。看起来很简单,但LINQ的一些解决方案看起来很复杂,因为我不熟悉LINQ和XML解析。

我只希望在R1内的值为B1,B2,B3和C1,C2 ......(还有R2,R3 ......也可以。)

我尝试过的是,

string greenvalue = objDoc.Descendants("R1").First().Element("B1").Value.ToString();

string bluevalue = objDoc.XPathSelectElement("//ITEM[R1]").Element("B1").Value.ToString();

XML代码如下,

-<RESULT>
   -<ITEM>
      -<R1>
         -<B DESC="product">
             <B1> chocolate </B1>
             <B2> white </B2>
             <B3> Kisses </B3>
             <B4> bar type </B4>
             <B5> 2 $ </B5>
             <B6>2014-09-26 </B6>
             <B7>201404418 </B7>
          </B>
         -<C DESC="ingredient">
            -<CR1>
                <C1>cacao paste </C1>
                <C2> concentrated </C2>
                <C3> 21.69 </C3>
                <C4> gram </C4>
            </CR1>
         </C>

2 个答案:

答案 0 :(得分:1)

您尝试的代码无效,因为<B1>不是<R1>的直接子代。您需要考虑<B>元素。

  

“我只希望值为B1,B2,B3和C1,C2 .....在R1内”

这是一种可能的方式:

string bluevalue = (string)objDoc.XPathSelectElement("//R1/B/B1");

或没有XPath的等效LINQ:

string greenvalue = (string)objDoc.Descendants("R1")
                                  .Elements("B")
                                  .Elements("B1")
                                  .FirstOrDefault();

答案 1 :(得分:1)

您需要做的第一件事是使用XmlDocument类将xml文件解析为C#。那么你可以逐个引用xml标签。

XmlDocument doc = new XmlDocument(); // load document
doc.Load(Path);
XmlNodeList nodeList = doc.GetElementsByTagName("R1")

然后您可以访问R1内的节点和值。

nodeList[i].ParentNode.Name
nodeList[i].ChildNodes[x].InnerText
nodeList[i].ChildNodes[x].Attributes["Id"].Value