从xml节点获取子节点

时间:2013-05-09 00:16:24

标签: c# xml

我有xml,如:

<?xml version="1.0" encoding="utf-8" ?> 
<response list="true">
    <count>10748</count> 
    <post>
        <id>164754</id>
        <text></text> 
        <attachments list="true">
            <attachment>
                <type>photo</type> 
                <photo>
                    <pid>302989460</pid> 
                </photo>
            </attachment>
        </attachments>

我需要检查<attachment>中是否有<post>。 我得到的所有帖子都是这样的:

XmlNodeList posts = XmlDoc.GetElementsByTagName("post");
foreach (XmlNode xnode in posts)
{
    //Here I have to check somehow
}

如果帖子中没有<attachment>个节点,我想改为<text>

3 个答案:

答案 0 :(得分:1)

如果您从XmlDocument更改为XElement,则可以使用LINQ查询来获取attachment个节点的数量。

//load in the xml
XElement root = XElement.Load("pathToXMLFile"); //load from file
XElement root = XElement.Parse("someXMLString"); //load from memory

foreach (XElement post in root.Elements("post"))
{
    int numOfAttachNodes = post.Elements("attachments").Count();

    if(numOfAttachNodes == 0)
    {
        //there is no attachment node
    }
    else
    {
        //something if there is an attachment node
    }
}

答案 1 :(得分:0)

你可以尝试一个linq查询,就像这样

var result = XmlDoc.Element("response")
                   .Elements("post").Select(item => item.Element("attachments")).ToList();

foreach(var node in result)
{

}

答案 2 :(得分:-1)

检查“帖子”中是否有任何节点:

if(posts.Count == 0)
{
    // No child nodes!
}

您可以在开始循环之前执行此操作。