2

我是新来的——我猜你们是最棒的——所以就这样吧。

这是我的问题。我敢于创建一个完全基于 XML 的完整博客站点——没有数据库。到目前为止,我做得很好。我只有一个问题阻碍了我一起完成这个项目。

我有一个像这样的“博客评论”xml 文档:

<comments>
    <blogId id="123">
        <commentID>46</commentID>
        <userName>user1</userName>
        <userComment>This is a test comment</userComment>
    </blogId>
</comments>
<comments>
    <blogId id="123">
        <commentID>47</commentID>
        <userName>user2</userName>
        <userComment>this is a test comment by some user</userComment>
    </blogId>
</comments>
<comments>
    <blogId id="1244">
        <commentID>129</commentID>
        <userName>user3</userName>
        <userComment>This is someone else's comment</userComment>
    </blogId>
</comments>

我希望能够计算附加到第一个 blogId 节点(?)的评论数量。

到目前为止,我已经打开了文档并且能够阅读,但我不知道如何计算.... 想法?

4

3 回答 3

1
var count = XDocument
     .Load("c://blog.xml")
     .XPathSelectElements("//comments/blogId[@id='123']")
     .Count();
于 2012-10-06T02:26:32.383 回答
1
XDocument doc = //your xml document

//to get the count of comments with the first id:
var blogs = doc.Descendants("blogId");
var firstId = blogs.First().Attribute("id").Value;
int count = blogs.Count(x => x.Attribute("id").Value == firstId);

//this seems more useful to me:
var commentsByBlogId = doc.Descendants("blogId").GroupBy(x => x.Attribute("id").Value);
于 2012-10-06T02:35:03.893 回答
0

如果您使用的是 LINQ,您可以执行一个简单的查询doc.Descendants("Comment").Count(x => x.Attributes["id"] == "123")

我在没有 Visual Studio 的情况下编写此代码,该属性的处理方式可能略有不同,如果您想更频繁地使用此代码,您应该考虑添加基本错误处理(即“id”属性不存在)。

于 2012-10-06T02:24:07.927 回答