除了Java之外,与此问题非常相似.
在Java中为XML输出编码字符串的推荐方法是什么?字符串可能包含"&","<"等字符.
我试图在.NET(C#)中的字符串中删除XML实体,但我似乎没有让它正常工作.
例如,如果我有字符串AT&T,则应将其翻译为AT&T.
一种方法是使用HttpUtility.HtmlDecode(),但这是用于HTML.
所以我有两个问题:
使用HttpUtility.HtmlDecode()解码XML实体是否安全?
我如何使用XmlReader(或类似的东西)来做到这一点?我尝试了以下,但总是返回一个空字符串:
static string ReplaceEscapes(string text)
{
StringReader reader = new StringReader(text);
XmlReaderSettings settings = new XmlReaderSettings();
settings.ConformanceLevel = ConformanceLevel.Fragment;
using (XmlReader xmlReader = XmlReader.Create(reader, settings))
{
return xmlReader.ReadString();
}
}
Run Code Online (Sandbox Code Playgroud)我有一个Web服务,它返回一个xml字符串作为结果.返回字符串采用以下格式:
<ReturnValue>
<ErrorNumber>0
</ErrorNumber>
<Message>my message</Message>
</ReturnValue>
Run Code Online (Sandbox Code Playgroud)
我想要插入"message"标记的数据是自定义对象的序列化版本.该对象的序列化格式包含序列化后的xml和名称空间声明.当它被扔进我的返回xml字符串的"message"标签时,XmlSpy说它没有格式良好.我应该如何摆脱名称空间声明,还是有一种不同的方法将序列化对象嵌入到xml字符串中?
我的应用程序使用 XmlDocument 生成 XML。一些数据包含换行符和回车符。
当像这样将文本分配给 XmlElement 时:
e.InnerText = "Hello\nThere";
Run Code Online (Sandbox Code Playgroud)
生成的 XML 如下所示:
<e>Hello
There</e>
Run Code Online (Sandbox Code Playgroud)
XML 的接收者(我无法控制)将换行符视为空白,并将上述文本视为:
"Hello There"
Run Code Online (Sandbox Code Playgroud)
为了让接收者保留换行符,它需要编码为:
<e>Hello
There</e>
Run Code Online (Sandbox Code Playgroud)
如果数据应用于 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 = …Run Code Online (Sandbox Code Playgroud)