【问题标题】:C# XML) How to get values within specific tag?C# XML) 如何获取特定标签内的值?
【发布时间】:2016-05-10 05:39:51
【问题描述】:

我尝试了以下方法,但它们无法显示 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>

【问题讨论】:

    标签: c# xml linq parsing tags


    【解决方案1】:

    您尝试的代码无效,因为&lt;B1&gt; 不是&lt;R1&gt; 的直接子代。您需要考虑介于两者之间的 &lt;B&gt; 元素。

    “我只希望 R1 中的值为 B1、B2、B3 和 C1、C2.....”

    这是一种可能的方式:

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

    或等效的不带 XPath 的 LINQ:

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

    【讨论】:

    • 哦..非常感谢!第一个工作正常。我已经尝试了几个小时,但找不到适合我的情况的。感谢您的出色知识和支持!
    • 你能帮我多一点吗..?我也需要获取 C1 值,但是 (string)objDoc.XPathSelectElement("//R1/C/CR1/C1").Value;不起作用..与 NullReferenceException..我真的不熟悉 XML 结构和郁闷..请再次建议我..
    • XPath 应该适用于相关的 XML。鉴于它不起作用,这意味着您的 actual XML 的结构不同。在这种情况下,请打开新问题,发布示例 XML 和代码 sn-p 以重现问题。谢谢
    • 好的,请等待 30 分钟。我将打开一个新问题并发布所有 XML。据我所知,它是一样的......哦,我的天哪!
    • @KayLee 当然,如果您发布了,请告诉我。这是一个最小但完整代码的示例,在这种情况下,它演示了我如何无法在此问题中使用 XML 重现问题
    【解决方案2】:

    您需要做的第一件事是使用 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
    

    【讨论】:

    • 我知道如何加载 XDocument,感谢您的出色知识和支持。但是,另一个人早些时候提供了正确答案。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-26
    • 2020-06-13
    • 1970-01-01
    • 2020-02-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多