【问题标题】:Preserve decimal character entities in XML C#在 XML C# 中保留十进制字符实体
【发布时间】:2019-10-25 06:34:25
【问题描述】:

我使用 XmlDocument 类来加载 XML 和 XmlWriter 类来生成文件。我想保留 xml 中存在的十进制字符实体(粗体字符),如下所示,

<car id="wait for the signal &#10;&#10; then proceed">

尝试了 XmlTextReader 之类的选项,但没有成功。处理文件中的上述行后,如下所示,

    <car id="wait for the signal

then proceed">

<car id="wait for the signal &#xA;&#xA; then proceed">

我使用的 XmlWriter 代码块,

XmlWriterSettings xmlWriterSettings = new XmlWriterSettings
{
    Indent = true,
    Encoding = encoding,
    NewLineHandling = NewLineHandling.None
};
XmlDataDocument xmlDataDocument = new XmlDataDocument
{
    PreserveWhitespace = true
};
xmlDataDocument.LoadXml(xmlString);
using (XmlWriter writer = XmlWriter.Create(filepath, xmlWriterSettings))
{
    if (writer != null)
    {
        xmlDataDocument.Save(writer);
    }
}

非常感谢任何帮助。

【问题讨论】:

  • 你想达到什么目的?你所说的“保留”是什么意思。要么它被转换为换行符,要么它仍然是 。您展示的两个选项都不能满足您的要求?这里的主题是 XML 编码。

标签: c# xml character-entities


【解决方案1】:

我不确定你想在这里实现什么。

&amp;#10;&amp;#xA; 是等价的。他们都引用了换行符。一种是十进制形式,另一种是十六进制形式。两者都可以与 XML 解析器一起使用。

如果您阅读官方的XML Documentation,它指定了任何一种引用方法都是允许的。

为什么需要保留十进制形式?

【讨论】:

  • 我的要求是我已经 在处理之前的文件中,它被替换为 文件处理后。我可以在文件中保留十进制实体的任何选项?
  • 我的意思是 和 是相同的,它们都表示“10”,一个是十进制,一个是十六进制。解析器不关心你使用哪一个,解析器和编码器会互换它们。为什么需要保留此表单?
  • 感谢您对此进行澄清。甚至我也是这么想的。我有一个外部团队,他们在解析 XML 中的这些字符引用时遇到了麻烦。
【解决方案2】:

就 XML 解析器而言,它将始终以与处理字符本身完全相同的方式处理数字字符引用。

您唯一可行的方法是在 XML 解析器看到文件之前对其进行预处理,将 &amp; 替换为其他字符,例如 §。当然,之后再反转这个过程。

【讨论】:

    猜你喜欢
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-22
    相关资源
    最近更新 更多