gpt4 book ai didi

c# - 使用 XmlDocument 转义换行符

转载 作者:数据小太阳 更新时间:2023-10-29 02:13:16 32 4
gpt4 key购买 nike

我的应用程序使用 XmlDocument 生成 XML。部分数据包含换行符和回车符。

像这样将文本分配给 XmlElement 时:

   e.InnerText = "Hello\nThere";

生成的 XML 如下所示:

<e>Hello
There</e>

XML 的接收者(我无法控制)将换行符视为空白并将上述文本视为:

 "Hello There"

为了让接收者保留换行符,它需要编码为:

<e>Hello&#xA;There</e>

如果数据应用于 XmlAttribute,则换行符已正确编码。

我已尝试使用 InnerText 和 InnerXml 将文本应用于 XmlElement,但两者的输出相同。

有没有办法让 XmlElement 文本节点以其编码形式输出换行符和回车符?

下面是一些演示问题的示例代码:

string s = "return[\r] newline[\n] special[&<>\"']";
XmlDocument d = new XmlDocument();
d.AppendChild( d.CreateXmlDeclaration( "1.0", null, null ) );
XmlElement r = d.CreateElement( "root" );
d.AppendChild( r );
XmlElement e = d.CreateElement( "normal" );
r.AppendChild( e );
XmlAttribute a = d.CreateAttribute( "attribute" );
e.Attributes.Append( a );
a.Value = s;
e.InnerText = s;
s = s
.Replace( "&" , "&amp;" )
.Replace( "<" , "&lt;" )
.Replace( ">" , "&gt;" )
.Replace( "\"", "&quot;" )
.Replace( "'" , "&apos;" )
.Replace( "\r", "&#xD;" )
.Replace( "\n", "&#xA;" )
;
e = d.CreateElement( "encoded" );
r.AppendChild( e );
a = d.CreateAttribute( "attribute" );
e.Attributes.Append( a );
a.InnerXml = s;
e.InnerXml = s;
d.Save( @"C:\Temp\XmlNewLineHandling.xml" );

这个程序的输出是:

<?xml version="1.0"?>
<root>
<normal attribute="return[&#xD;] newline[&#xA;] special[&amp;&lt;&gt;&quot;']">return[
] newline[
] special[&amp;&lt;&gt;"']</normal>
<encoded attribute="return[&#xD;] newline[&#xA;] special[&amp;&lt;&gt;&quot;']">return[
] newline[
] special[&amp;&lt;&gt;"']</encoded>
</root>

提前致谢。克里斯。

最佳答案

使用 HttpUtility.HtmlEncode()怎么样? ?
http://msdn.microsoft.com/en-us/library/73z22y6h.aspx

好的,很抱歉这里的引导错误。 HttpUtility.HtmlEncode()处理您面临的换行问题。

不过,此博客链接可以帮助您
http://weblogs.asp.net/mschwarz/archive/2004/02/16/73675.aspx

基本上,换行处理由 xml:space="preserve" 控制属性。

示例工作代码:

XmlDocument doc = new XmlDocument();
doc.LoadXml("<ROOT/>");
doc.DocumentElement.InnerText = "1234\r\n5678";

XmlAttribute e = doc.CreateAttribute(
"xml",
"space",
"http://www.w3.org/XML/1998/namespace");
e.Value = "preserve";
doc.DocumentElement.Attributes.Append(e);

var child = doc.CreateElement("CHILD");
child.InnerText = "1234\r\n5678";
doc.DocumentElement.AppendChild(child);

Console.WriteLine(doc.InnerXml);
Console.ReadLine();

输出将显示为:

<ROOT xml:space="preserve">1234
5678<CHILD>1234
5678</CHILD></ROOT>

关于c# - 使用 XmlDocument 转义换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5160632/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com