当前位置: 首页 > 知识库问答 >
问题:

将XML节点绑定到Gridview C#

柳鸿信
2023-03-14
<book category="web">
<title lang="en">XQuery Kick Start</title>
<author>James McGovern</author>
<author>Per Bothner</author>
<author>Kurt Cagle</author>
<author>James Linn</author>
<author>Vaidyanathan Nagarajan</author>
<year>2003</year>
<price>49.99</price>
    <author>
         <name1> </name1>
         <name2> </name2>
         <name3> </name3>
    </author>

最后重要的一点是,我要创建的这些节点本身可能有几个属性。因此,为了保持上面的例子,它可能是每个作者的出生日期和地点列出。

任何建议都很感激。

共有1个答案

濮阳振
2023-03-14

我首先要说的是,有很多不同的方法可以做到这一点。在不知道您到底要做什么的情况下,我会给您一些非常灵活和简单的方法,但可能不是最简洁或“正确”的方法。一个更好的解决方案是针对数据编写查询,然后显示结果行,但这可能对您的目的来说是过度的。我不会在这里演示这一点。

理想情况下,您的xml结构更像下面这样。

<books>
    <book category='web'>
        <title lang='en'>XQuery Kick Start</title>
        <authors>
            <author>Vaidyanathan Nagarajan</author>
            <author>thomas waterloo</author>
            <author>malinda gatesauthor>
            <author>rusty weatherford</author>
        <authors>
        <year>2003</year>
        <price>49.99</price>
    </book>
</books>

其次,GridView并不真正喜欢绑定到嵌套数据。当然有一种方法可以做到这一点,但您最好只是循环遍历数据并将其打印到屏幕上。或者,您可以使用Repeater控件进行调查。

尝试下面的代码。我能够在一个新的ASP.NET web窗体项目中运行此功能。

default.aspx:

<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1._Default" %>
<%@ Import Namespace="System.Xml" %>

<asp:Content runat="server" ID="BodyContent" ContentPlaceHolderID="MainContent">
    <table>
    <% foreach ( XmlNode book in myNodes) { %>
            <tr>
            <% foreach ( XmlNode childElement in book ) {
                   string title = null;
                   string year = null;
                   string price = null;
                   List<string> authors = new List<string>();

                   switch (childElement.Name)
                   {
                       case "title":
                           title = childElement.InnerText.ToString();
                           break;
                       case "year":
                           year = childElement.InnerText.ToString();
                           break;
                       case "price":
                           price = childElement.InnerText.ToString();
                           break;
                       case "authors":
                           foreach (XmlNode grandChildElement in childElement)
                           {
                               authors.Add(grandChildElement.InnerText);
                           }
                           break;
                   }%>

                    <td><label><%= title %></label></td>
                    <td><label><%= year %></label></td>
                    <td><label><%= price %></label></td>
                    <td>
                        <%foreach( string author in authors ){ %>
                            <label> <%= author %></label><br />
                        <% } %>
                    </td>
            <% } %>
            </tr>
    <% } %>
    </table>
</asp:Content>

default.aspx.cs:

using System;
using System.Data;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Xml;

namespace WebApplication1
{
    public partial class _Default : Page
    {
        protected XmlNodeList myNodes = null;

        protected void Page_Load(object sender, EventArgs e)
        {
            string booksXml = @"<books>
                <book category='web'>
                    <title>Columbus Sailed the Ocean Blue</title>
                    <year>1492</year>
                    <price>6 gold doubloons</price>
                    <authors>
                        <author>Vaidyanathan Nagarajan</author>
                        <author>john doe</author>
                        <author>jane doe</author>
                    </authors>
                </book>
                <book category='web'>
                    <title>Best Book Ever</title>
                    <year>1776</year>
                    <price>23.55</price>
                    <authors>
                        <author>Robert Frost</author>
                    </authors>
                </book>
                <book category='web'>
                    <title>Hello World!</title>
                    <year>20013</year>
                    <price>49.99</price>

                </book>
                <book category='web'>
                    <title>1234</title>
                    <year>1999</year>
                    <price>69.99</price>
                    <authors>
                        <author>Carmen SanDiego</author>
                        <author>Roger Rabbit</author>
                    </authors>
                </book>
            </books>";

            XmlDocument doc = new XmlDocument();
            doc.LoadXml(booksXml);

            //doc.ChildNodes[0] is the entire books element and al of its children
            //doing .ChildNodes again gives you all of the book elements
            this.myNodes = doc.ChildNodes[0].ChildNodes;
        }
    }
}
 类似资料:
  • 我在一个应用程序上工作,该应用程序向SQL数据库询问不同的值。这里我有一个近40列的表,我的pojos有JavaFX-Properties。所以现在我将填充数据库数据的属性绑定到UI组件,如文本字段等。 我现在的做法是手动将所有ui属性绑定到pojo属性。但这是一个很大的方法,有40个条目可以手动绑定所有属性。 你能告诉我一个更好的方法吗?也许像javafx的表系统一样通过字符串绑定属性? @詹姆

  • 问题内容: 我正在尝试将包含的节点另存为新文件,这是获取新文档并拆分为更小的节点列表: 输出是一个很长的列表,例如: 现在,我想将该节点另存为新的新文件,但是我没有找到按原样返回该节点的函数。谢谢。 问题答案: 您可以将节点转换为字符串,然后将此字符串保存到文件中。 将节点转换为字符串 下面的方法会将节点转换为xml字符串。这是仅JDK的解决方案,不需要依赖项。

  • 我想将XML节点值(从AJAX脚本发送的XML)映射到相应的HTML表单元素中。例如,XML数据; 应通过脚本插入HTML表单: 问题在于,脚本应该通用地适用于所有对象(不能预先知道XML中会给出哪些字段,例如,如果“fieldx”是用XML发送的,则该脚本应该满足document.myform.fieldx表单元素,并具有XML中的相应值)。所以这个脚本应该循环所有XML节点,并尝试将值设置为H

  • 有没有一种方法可以直接将memcached绑定到它下面的本地存储?将用一个例子来解释。假设hbase被用作分布式的后端。memcached的一层被用作缓存层,它可以被认为是hbase的一个完全副本(在某种意义上)。假设系统中有4个节点,其中3个用于hbase并在其顶部有一个memcached层,1个节点用于计算。通常的规范是查找memcached是否有某个键。如果有,取出来并用于计算。如果没有,则

  • 在本章中,我们将学习XML DOM节点。 每个XML DOM都包含称为节点的分层单元信息,DOM描述了这些节点以及它们之间的关系。 节点类型 以下图显示了所有节点类型 - XML中最常见的节点类型是 - 文档节点(Document Node) - 完整的XML文档结构是文档节点。 元素节点(Element Node) - 每个XML元素都是一个元素节点,它也是唯一可以拥有属性的节点类型。 属性节点

  • 问题内容: 您正在使用什么将XML绑定到Java?JAXB,Castor和XMLBeans是一些可用的选择。我所看到的比较都是三到四年了。我愿意接受其他建议。编组/解组性能和易用性特别受关注。 澄清:我不仅要看您使用什么框架,还要看您使用一个框架的理由。 问题答案: JiBX。以前我使用Castor XML,但事实证明JiBX明显更好,特别是在性能方面(从Castor XML到JiBX的一些应用程