要素名と属性名、または ID 値で使用できる文字は、W3C 勧告『Extensible Markup Language (XML) 1.0 (Second Edition)』で定義されている XML 文字範囲に制限されます。この勧告は、www.w3.org/TR/2000/REC-xml-20001006.html で公開されています。名前に無効な文字が含まれている場合は、エンコード メソッドとデコード メソッドを使用して有効な XML 名に変換します。
Microsoft SQL Server や Microsoft Word など、多くの言語やアプリケーションでは、XML 名としては有効でない Unicode 文字を名前に使用できます。たとえば、データベースの列ヘッダーが Order Detail である場合、データベースでは Order と Detail の間に空白を挿入できますが、XML では Order と Detail の間の空白が無効な XML 文字と見なされます。このため、無効な文字である空白は、エスケープされた 16 進形式エンコーディングに変換する必要があり、これは後でデコードできます。
XmlTextWriter クラスは、既定では文字のチェックを行いません。たとえば、WriteElementString(
"Order Detail
",
"My order
");
というコードは、<Order Detail>My order</Order Detail>
という無効な要素を生成します。
この要素名をエンコードするには、writer.WriteElementString(XmlConvert.EncodeName("Order Detail"), "My order")
とするのが正しいエンコーディングです。これにより、<Order_0x0020_Detail>My order</Order_0x0020_Detail>
という有効な要素が生成されます。