【问题标题】:How to prevent text inside of xml element from being encoded?如何防止xml元素内的文本被编码?
【发布时间】:2014-08-05 17:34:09
【问题描述】:

我在 C# 应用程序中的编码遇到了一点问题。

所以,我要做的是获取一个 xml 元素并在其中填充一些数据,以便我可以通过文件将这些数据传输到另一个应用程序。但是,每当我序列化该元素时,元素内部的 xml 文本都会被编码。有没有办法防止它被编码?

所以我可以拥有的一个例子是这样的:

<element attribute="foo">
    <![CDATA[ some data here.... ]]>
</element>

但它实际输出的是这样的:

<element attribute="foo">
    &lt![CDATA[ some data here.... ]] &gt
</element>

这是我的序列化器:

XmlDocument doc = new XmlDocument();

StringBuilder xml = new StringBuilder();
XmlSerializer serializer = new XmlSerializer( objToSerialize.GetType() );
XmlWriterSettings settings = new XmlWriterSettings()
{
    OmitXmlDeclaration = true,
    Indent = true
};

using ( StringWriter writer = new StringWriter( xml ) )
using ( XmlWriter xmlWriter = XmlWriter.Create( writer, settings ) )
{
    XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
    ns.Add( "", "" ); // Removes the xsd & xsi namespace declarations from the xml
    serializer.Serialize( xmlWriter, objToSerialize, ns );
}

return xml.ToString()

如何防止这种情况发生?谢谢!

【问题讨论】:

  • 如果您正在生成 XML,为什么要阻止编码?那就是保持 XML 有效,在另一端你只需要解码它。

标签: c# xml xml-serialization xmlserializer


【解决方案1】:

由于您在 StringBuilder 中生成 XML,XmlWriter 不会自动检查 CData 部分。您必须使用 XmlWriter 方法(如 WriteCData)或使用其他框架(如 Linq to Xml)手动生成 xml。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-13
    • 2012-03-10
    • 1970-01-01
    • 2021-10-14
    • 1970-01-01
    相关资源
    最近更新 更多