【问题标题】:How can I get the XML value for a second level Child node如何获取第二级子节点的 XML 值
【发布时间】:2019-10-22 12:28:27
【问题描述】:

我有一个 xml 文件,需要使用 C# 从二级子节点中提取 InnerXML。下面是我的 XML 的 sn-p。

<joblisting:department>Supply</joblisting:department>
<guid isPermaLink="true">https://www.governmentjobs.com/careers/ocso/Jobs/2594527</guid>
<joblisting:categories>
    <joblisting:category xmlns:joblisting="http://www.neogov.com/namespaces/JobListing" xmlns:atom="http://www.w3.org/2005/Atom">
        <CategoryCode>ClericalDataEntry</CategoryCode>
        <Category>Clerical &amp; Data Entry</Category>
    </joblisting:category>
</joblisting:categories>

我需要获取 Category 元素的值。

我尝试使用这个 C# 代码:

XmlNode t = rssNode.LastChild;
if (t.HasChildNodes)
{
    for (int i = 0; i < t.ChildNodes.Count; i++)
    {
        string xcategory = (t.ChildNodes[i].InnerXml);
        string category = "<category>" + xcategory + "</category>";
        sb.AppendLine(category);
    }
}

但它将整个子树返回为

<category>
  <CategoryCode>ClericalDataEntry</CategoryCode>
  <Category>Clerical &amp; Data Entry</Category>
</category

我只想得到 Category 元素的值

我怎样才能只深入到那个元素?

【问题讨论】:

    标签: c# xml xml-parsing


    【解决方案1】:

    现在您正在获取整个t.ChildNodes[i],而您只想要它的一个孩子。

    因此,根据您目前所掌握的情况,您需要再次深入了解if (t.ChildNodes[i].HasChildren) 并循环遍历这些内容,检查t.ChildNodes[i].ChildNodes[j].Name == "Category",然后获取其t.ChildNodes[i].ChildNodes[j].Value

    但这有点老套,最终会出现嵌套循环(if...for...if...for),因此您可能希望使用递归。或者,使用 XmlSerializer 并将数据映射到对象模型可能会更好。 Link

    【讨论】:

    • 感谢@mjung 的帮助,您的 cmets 启发了我找到更清洁的解决方案。
    • 乐于助人。我喜欢你的想法!
    【解决方案2】:

    在阅读了 mjung 的 cmets 之后,我更深入地了解并能够想出一种更简洁的方法来实现我的目标。我想出了下面的代码来获取我的数据。

    rssSubNode = rssNode.SelectSingleNode("joblisting:categories", nsmgr);
                    if (rssSubNode.HasChildNodes)
                    {
                        rssSubNode = rssSubNode.SelectSingleNode("joblisting:category", nsmgr);
                        rssSubNode = rssSubNode.SelectSingleNode("Category");
                        string category = rssSubNode.InnerXml;
                        string Category = "<category>" + category + "</category>";
                        sb.AppendLine(Category);
                    }
    

    【讨论】:

      猜你喜欢
      • 2016-10-09
      • 2013-04-15
      • 2012-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多