0

大家好,我想从 asp.net 中的 xml 文件中获取前 5 条记录。请告诉我我该怎么做,我正在从 xml 中获取这样的数据

这是我的转发器标记我正在将我的数据与转发器中的 eval 标记绑定

<asp:Repeater ID="Repeater1" runat="server">
        <ItemTemplate>
  <!-- content -->

      <div class="post">
        <div class="right">
          <h2><a href="#">
              <asp:Label ID="lbltitle" runat="server" Text='<%#Eval("title ") %>'></asp:Label></a></h2>
            <asp:Label ID="lblcontent" runat="server" Text='<%#Eval("Discription") %>'></asp:Label>
        </div>
        <div class="left">

          <p class="dateinfo">
          <asp:Label ID="lbldate"
                  runat="server" Text='<%#Eval("DT") %>'></asp:Label>
              <span><asp:Label ID="lblmnth" runat="server" Text='<%#Eval("mnt") %>'></asp:Label></span></p>
          <div class="post-meta">
            <h4>Post Info</h4>
            <ul>
              <li class="user"><a href="#">Erwin</a></li>
              <li class="time"><a href="#">12:30 PM</a></li>
              <li class="comment">
                  <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
                  <asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl="~/PostComment.aspx"   >Comments</asp:HyperLink></li>
              <li class="permalink"><a href="#">Permalink</a></li>
            </ul>
          </div>
        </div>
      </div>


    </ItemTemplate>
        </asp:Repeater>

C# 代码

 var doc = XDocument.Load(Server.MapPath("~/Data/BlogContent.xml"));
    var result = doc.Descendants("post").Where(x => x.Element("id") != null).Select(x => new
    {
        id = x.Element("id").Value,
        title = x.Element("title").Value,
        Description = x.Element("Discription").Value,
        dt = x.Element("dt").Value,
        mnt = x.Element("mnt").Value,
        yr = x.Element("yr").Value
    }).OrderByDescending(x => x.id).Take(5);
    Repeater1.DataSource = result;
    Repeater1.DataBind();
4

4 回答 4

1

尝试使用 LINQ - 现在看到 XML,添加了一个允许空帖子的位置

var doc = XDocument.Load(@"c:\temp\test.xml");
var result = doc.Descendants("post").Where(x=>x.Element("id") != null).Select(x=>x).OrderByDescending(x=>int.Parse(x.Element("id").Value)).Take(5);

如果你想更进一步,你可以像这样从结果中创建一个匿名类型(我必须在描述中复制你的拼写错误才能让它工作)

var doc = XDocument.Load(Server.MapPath("~/test.xml"));
var result = doc.Descendants("post").Where(x => x.Element("id") != null).Select(x => new
{
    id = x.Element("id").Value,
    title = x.Element("title").Value,
    Description = x.Element("Discription").Value,
    dt = x.Element("dt").Value,
    mnt = x.Element("mnt").Value,
    yr = x.Element("yr").Value
}).OrderByDescending(x => x.id).Take(5);
于 2013-06-21T09:15:37.853 回答
0

尝试以下

            // load xml
        var xmlDoc = System.Xml.Linq.XDocument.Load("[XML PATH]");

        // get root with name ArrayOfActivity
        var items = xmlDoc.Elements("ArrayOfActivity").FirstOrDefault();

        // get top 5 
        var top5 = items.Elements().OrderBy(x=>x.Elements("Id")).Take(5);

        // loop children
        foreach (var x in items.Elements())
        {
            Console.WriteLine(x.Value);
        }

然后,您可以像这样绑定列表(以 top5 作为上面的数据源):

            // if you want you can bind the list to a datagrid
        DataGrid dg = new DataGrid();
        dg.DataSource = top5;
        dg.DataBind();

要使用您的示例,请使用以下代码

System.Xml.Linq.XDocument xd = new System.Xml.Linq.XDocument("<?xml version='1.0' encoding='utf-8'?> <content> <post> </post> <post> <id>1</id> <title>fds</title> <Discription>fdsafsdf</Discription> <dt>21</dt> <mnt>6</mnt> <yr>2013</yr> </post> </content>");

        // Get all posts
        var items = xd.Elements("posts").OrderBy(x=>x.Elements("[Id]")).Take(5);
于 2013-06-21T09:17:12.233 回答
0

您可以尝试将数据加载到 XmlDocument 中,然后使用 SelectNodes 方法创建一个 XmlNode 列表:

XmlDocument Document = new XmlDocument();
XmlNodeList XNList;
        try
        {
            openFileDialog1.ShowDialog();
            Document.Load(openFileDialog1.FileName);
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString());
        }
        XNList = Document.SelectNodes("RootNode/Node");            

通过这种方式,您可以使用列表,并通过列表中的索引或使用任何循环来简单地访问前 n 个节点。

于 2013-06-21T09:15:04.820 回答
0

可能这会帮助您直接从 中选择 TOP 5 记录xmlDocument

XmlDocument xml = new XmlDocument();
xml.LoadXml(myXmlString);

XmlNodeList xNodeList = xml.SelectNodes("/content/post[position() <= 5]");

现在您可以迭代xNodeList以获取post标签内的特定值。

您还可以从数据表中选择 TOP N 记录,然后 Linq 将是更好的选择

dt.AsEnumerable().Take(5);
于 2013-06-21T09:13:18.597 回答