C# 使用 XmlWriter 创建 html

C# 使用 XmlWriter 创建 html

a标签

使用XmlWriter可以创建HTML文档,以下是一个简单的示例:


using System.Xml;

class Program
{
    static void Main(string[] args)
    {
        XmlWriterSettings settings = new XmlWriterSettings();
        // 允许输出XML片段。
        settings.ConformanceLevel = ConformanceLevel.Fragment;
        // 允许调用 XmlWriter.WriteRaw(((char)0x00).ToString())
        settings.CheckCharacters = false;
        settings.Indent = true;
        // 在写入XML时省略XML声明。
        settings.OmitXmlDeclaration = true;

        using (XmlWriter writer = XmlWriter.Create("output.html", settings))
        {
            writer.WriteStartElement("html");
            writer.WriteStartElement("head");
            writer.WriteElementString("title", "My HTML Document");
            writer.WriteEndElement(); // head

            writer.WriteStartElement("body");
            writer.WriteStartElement("h1");
            writer.WriteString("Hello World!");
            writer.WriteEndElement(); // h1

            writer.WriteStartElement("p");
            writer.WriteString("This is a paragraph. ");
            writer.WriteStartElement("a");
            writer.WriteAttributeString("href", "https://www.example.com");
            writer.WriteString("Click here");
            writer.WriteEndElement(); // a
            writer.WriteString(" to visit Example.com.");
            writer.WriteEndElement(); // p

            writer.WriteEndElement(); // body
            writer.WriteEndElement(); // html
            
            writer.Flush();
        }
    }
}



在这个示例中,我们在段落中添加了一个标签,并使用WriteAttributeString方法添加了href属性,指定了链接的URL。然后,我们使用WriteString方法添加了链接文本。

运行此代码后,将在输出文件中创建一个名为output.html的HTML文档,其中包含一个带有链接的段落。点击链接将跳转到指定的URL。

要在使用XmlWriter创建HTML文档时不输出XML声明<?xml version="1.0" encoding="utf-16"?>,可以通过设置XmlWriterSettings的OmitXmlDeclaration属性为true来实现。

不包含XML声明

以下是一个示例代码,演示如何创建一个不包含XML声明的HTML文档:


using System.Xml;

class Program
{
    static void Main(string[] args)
    {
        XmlWriterSettings settings = new XmlWriterSettings();
        // 允许输出XML片段。
        settings.ConformanceLevel = ConformanceLevel.Fragment;
        // 允许调用 XmlWriter.WriteRaw(((char)0x00).ToString())
        settings.CheckCharacters = false;
        settings.Indent = true;
        // 在写入XML时省略XML声明。
        settings.OmitXmlDeclaration = true;

        using (XmlWriter writer = XmlWriter.Create("output.html", settings))
        {
            writer.WriteStartElement("html");
            writer.WriteStartElement("head");
            writer.WriteElementString("title", "My HTML Document");
            writer.WriteEndElement(); // head

            writer.WriteStartElement("body");
            writer.WriteStartElement("h1");
            writer.WriteString("Hello World!");
            writer.WriteEndElement(); // h1

            writer.WriteStartElement("p");
            writer.WriteString("This is a paragraph.");
            writer.WriteEndElement(); // p

            writer.WriteEndElement(); // body
            writer.WriteEndElement(); // html
            
            writer.Flush();
        }
    }
}


在这个示例中,我们创建了一个XmlWriterSettings对象,并将OmitXmlDeclaration属性设置为true,以便在写入XML时省略XML声明。

运行此代码后,将在输出文件中创建一个名为output.html的HTML文档,其中不包含XML声明。

添加一段 HTML

C# 中的 XmlWriter 类可以用于创建和编辑 XML 文档。如果要将 HTML 字符串添加到 XML 文档中,可以使用 WriteRaw 方法。以下是一个示例:


string htmlString = "<p>This is a <strong>bold</strong> text.</p>";

XmlWriterSettings settings = new XmlWriterSettings();
// 允许输出XML片段。
settings.ConformanceLevel = ConformanceLevel.Fragment;
// 允许调用 XmlWriter.WriteRaw(((char)0x00).ToString())
settings.CheckCharacters = false;
settings.Indent = true;
// 在写入XML时省略XML声明。
settings.OmitXmlDeclaration = true;

using (XmlWriter writer = XmlWriter.Create("output.xml", settings))
{
    writer.WriteStartElement("root");
    writer.WriteRaw(htmlString);
    writer.WriteEndElement();
}

在上面的示例中,我们首先定义了一个包含 HTML 字符串的变量。然后,我们创建了一个 XmlWriter 实例,并使用 WriteStartElement 方法写入一个根元素。接下来,我们使用 WriteRaw 方法将 HTML 字符串写入 XML 文档中。最后,我们使用 WriteEndElement 方法关闭根元素,并在 using 块结束时自动关闭 XmlWriter。

抛出异常的解决方案

System.ArgumentException: “.”(十六进制值 0x00)是无效的字符。

C# 中 System.Xml.XmlWellFormedWriter.WriteRaw(String data) 抛出以下异常时的解决方案

System.ArgumentException: “.”(十六进制值 0x00)是无效的字符。

这个异常是因为传入的字符串包含了无效的字符,其中包括十六进制值为 0x00 的字符。解决方案如下:

  1. 检查传入的字符串是否包含无效的字符,可以使用 System.Char.IsControl 方法来判断。

  2. 如果确实需要写入包含无效字符的字符串,可以使用
    XmlWriterSettings.CheckCharacters = false 设置。

XmlWriterSettings settings = new XmlWriterSettings();
// 允许调用 XmlWriter.WriteRaw(((char)0x00).ToString())
settings.CheckCharacters = false;

using (XmlWriter writer = XmlWriter.Create("output.xml", settings))
{
......
}
  1. 如果确实需要写入包含无效字符的字符串,可以使用绕过System.Xml.XmlWriter.WriteRaw(String data) 方法,直接调用函数
System.Xml.XmlWriter.WriteString(string.Empty);
System.Xml.XmlWriter.Flush();

后,直接面向 System.Xml.XmlWriter 引用的对象中写入数据。

            var builder = new StringBuilder(512);
            
            var settings = new XmlWriterSettings();
            settings.Encoding = Encoding.Unicode;
            settings.ConformanceLevel = ConformanceLevel.Fragment;
            // 允许调用 XmlWriter.WriteRaw(((char)0x00).ToString())
            settings.CheckCharacters = false;
            settings.OmitXmlDeclaration = true;

            using (XmlWriter writer = XmlWriter.Create(builder, settings))
            {
                    // 关闭元素,即输出 “>” 。
                    writer.WriteString(string.Empty);
                    writer.Flush();
                    builder.Append(("前" + (char)0x00 + "后").ToString());
            }
  1. 如果需要写入包含无效字符的字符串,可以使用 System.Text.Encoding.UTF8.GetBytes 方法将字符串编码为字节数组,然后使用 System.Xml.XmlWriter.WriteRaw 方法写入字节数组。在编码时可以使用 System.Text.Encoding.Replace 方法将无效字符替换为有效字符,或者使用其他编码方式来避免无效字符的出现。

System.ArgumentException: 无效的高代理项字符(0xDF20)。高代理项字符必须具有范围(0xD800 - 0xDBFF)内的值。

C# 中 System.Xml.XmlWellFormedWriter.WriteRaw(String data) 抛出以下异常时的解决方案
System.ArgumentException: 无效的高代理项字符(0xDF20)。高代理项字符必须具有范围(0xD800 - 0xDBFF)内的值。

这个异常是因为传入的字符串包含了无效的 Unicode 高代理项字符。解决方案如下:

  1. 检查传入的字符串是否包含无效的 Unicode 高代理项字符,可以使用 System.Char.IsHighSurrogate 方法来判断。

  2. 如果确实需要写入包含高代理项字符的字符串,可以使用绕过System.Xml.XmlWriter.WriteRaw(String data) 方法,直接调用函数

System.Xml.XmlWriter.WriteString(string.Empty);
System.Xml.XmlWriter.Flush();

后,直接面向 System.Xml.XmlWriter 引用的对象中写入数据。

            var builder = new StringBuilder(512);
            
            var settings = new XmlWriterSettings();
            settings.Encoding = Encoding.Unicode;
            settings.ConformanceLevel = ConformanceLevel.Fragment;
            // 允许调用 XmlWriter.WriteRaw(((char)0x00).ToString())
            settings.CheckCharacters = false;
            settings.OmitXmlDeclaration = true;

            using (XmlWriter writer = XmlWriter.Create(builder, settings))
            {
                    // 关闭元素,即输出 “>” 。
                    writer.WriteString(string.Empty);
                    writer.Flush();
                    builder.Append(("前" + (char)0xDF20 + "后").ToString());
            }
  1. 如果需要写入包含高代理项字符的字符串,可以使用 System.Text.Encoding.UTF8.GetBytes 方法将字符串编码为字节数组,然后使用 System.Xml.XmlWriter.WriteRaw 方法写入字节数组。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值