我尝试过类似下面的方法,但是他们没有显示出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>
答案 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