C# 如何获取二级子节点的XML值

C# 如何获取二级子节点的XML值,c#,xml,xml-parsing,C#,Xml,Xml Parsing,我有一个xml文件,需要使用C#从第二级子节点提取InnerXML。下面是我的XML的一个片段 <joblisting:department>Supply</joblisting:department> <guid isPermaLink="true">https://www.governmentjobs.com/careers/ocso/Jobs/2594527</guid> <joblisting:categories> &

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

<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>
供应
https://www.governmentjobs.com/careers/ocso/Jobs/2594527
神职人员记录
文书及;数据输入
我需要得到Category元素的值

我试着使用这个C代码:

XmlNode t=rssNode.LastChild;
if(t.HasChildNodes)
{
对于(int i=0;i
但它返回整个子树作为

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

神职人员记录
文书及;数据输入

现在,您正在获取整个
t.ChildNodes[i]
,您只需要它的一个子节点

因此,根据到目前为止的情况,您需要再次深入查看if(t.ChildNodes[i].haschilds)
并循环这些内容,检查
t.ChildNodes[i].ChildNodes[j].Name==“Category”
,然后获取其
t.ChildNodes[i].ChildNodes[j].Value


但这是一种黑客行为,最终会产生嵌套循环(if…for…if…for),因此可能需要使用递归。或者,最好使用XmlSerializer并将数据映射到对象模型

读了mjung的评论后,我更深入了一点,找到了一个更干净的方法来实现我的目标。我想出了下面的代码来获取我的数据

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);
                }
rssSubNode=rssNode.SelectSingleNode(“作业列表:类别”,nsmgr);
if(rssSubNode.HasChildNodes)
{
rssSubNode=rssSubNode.SelectSingleNode(“作业列表:类别”,nsmgr);
rssSubNode=rssSubNode.SelectSingleNode(“类别”);
字符串类别=rssSubNode.InnerXml;
字符串Category=“”+Category+”;
b.附加线(类别);
}

谢谢@mjung的帮助,您的评论启发我找到了一个更干净的解决方案。很高兴为您提供帮助。我喜欢你的想法!
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);
                }