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 的字符。解决方案如下:
-
检查传入的字符串是否包含无效的字符,可以使用 System.Char.IsControl 方法来判断。
-
如果确实需要写入包含无效字符的字符串,可以使用
XmlWriterSettings.CheckCharacters = false 设置。
XmlWriterSettings settings = new XmlWriterSettings();
// 允许调用 XmlWriter.WriteRaw(((char)0x00).ToString())
settings.CheckCharacters = false;
using (XmlWriter writer = XmlWriter.Create("output.xml", settings))
{
......
}
- 如果确实需要写入包含无效字符的字符串,可以使用绕过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());
}
- 如果需要写入包含无效字符的字符串,可以使用 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 高代理项字符。解决方案如下:
-
检查传入的字符串是否包含无效的 Unicode 高代理项字符,可以使用 System.Char.IsHighSurrogate 方法来判断。
-
如果确实需要写入包含高代理项字符的字符串,可以使用绕过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());
}
- 如果需要写入包含高代理项字符的字符串,可以使用 System.Text.Encoding.UTF8.GetBytes 方法将字符串编码为字节数组,然后使用 System.Xml.XmlWriter.WriteRaw 方法写入字节数组。