我个人永远不会尝试从头开始对 XML 进行字符串操作/解析。许多语言和框架中有许多内置实用程序可以为您处理这些问题。
下面是三种显示类似于您想要的 XML 数据的方法。你仍然需要修改它来做你想要的,但是这些应该会给你一些很好的想法。方法 3 可能是最接近的,但最好了解尽可能多的选项,以便为场景使用最佳方法。
方法一:
当我必须在网页中显示 xml 数据时,我更喜欢使用 XSLT。但是,这样做假定您的用户正在使用与 XSLT 兼容的浏览器。
artist.xml - 此文件包含 xml 文件本身的引用。
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="artist.xsl"?>
<artists>
<artist>
<id>1</id>
<name>Chuck Berry</name>
</artist>
<artist>
<id>2</id>
<name>Blackfoot</name>
</artist>
<artist>
<id>3</id>
<name>Trixter</name>
</artist>
<artist>
<id>4</id>
<name>D'Molls</name>
</artist>
<artist>
<id>5</id>
<name>The Runaways</name>
</artist>
</artists>
艺术家.xsl
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<ul>
<xsl:for-each select="artists/artist">
<li><xsl:value-of select="name"/></li>
</xsl:for-each>
</ul>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
方法二:
这完成了与上面相同的事情,除了它依赖于 .Net 进行转换。它似乎还可以更可靠地跨浏览器显示。可以在此处找到更强大的示例:http: //support.microsoft.com/kb/315906。
为此,我创建了一个简单的 c# WebForms 项目并将 xml 和 xsl 文件放在 App_Data 文件夹中。我还从 xml 文件中删除了样式表引用。
<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="SandboxWeb._Default" %>
<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent">
</asp:Content>
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
<h2>
Test!
</h2>
<asp:Xml id="Xml1" runat="server" DocumentSource="~/App_Data/artist.xml" TransformSource="~/App_Data/artist.xsl"></asp:Xml>
</asp:Content>
方法三:
这可能是您可能想要的。这也依赖于 Artist.xml 在 App_Data 文件夹中。
默认.aspx
<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true"
CodeBehind="Default.aspx.cs" Inherits="SandboxWeb._Default" %>
<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent">
</asp:Content>
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
<h2>
Test!
</h2>
<asp:Repeater ID="repeater1" runat="server">
<ItemTemplate>
<p>
<asp:Label Id="lblName" runat="server" Text="<%# Container.DataItem %>" />
</p>
</ItemTemplate>
</asp:Repeater>
</asp:Content>
默认.aspx.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.IO;
using System.Xml.Linq;
namespace SandboxWeb {
public partial class _Default : System.Web.UI.Page {
private XDocument xmlDoc;
public List<String> ArtistNames { get; set; }
protected void Page_Load(object sender, EventArgs e) {
ArtistNames = new List<String>();
xmlDoc = XDocument.Load(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "App_Data/artist.xml"));
ArtistNames = (from a in xmlDoc.Root.Descendants("artist") select a.Element("name").Value).ToList<String>();
repeater1.DataSource = ArtistNames;
repeater1.DataBind();
}
}
}