【问题标题】:Parsing an XML string containing " " (which must be preserved)解析包含“”的 XML 字符串(必须保留)
【发布时间】:2010-05-04 10:30:29
【问题描述】:

我的代码通过了包含 XML 的 string。此 XML 可能包含一个或多个  (空格字符的实体引用)实例。我有一个要求,这些引用不应被解析(即它们不应该被替换为实际的空格字符)。

我有什么办法可以做到这一点吗?

基本上,给定一个包含 XML 的字符串:

<pattern value="[A-Z0-9&#x20;]" />

我确实希望将其转换为:

<pattern value="[A-Z0-9 ]" />

(我实际上想要实现的是简单地获取一个 XML 字符串并将其写入“漂亮打印”文件。这具有将字符串中出现的 &amp;#x20; 解析为单个的副作用空格字符,需要保留。这个要求的原因是编写的XML文档必须符合外部定义的规范。)

我尝试创建XmlTextReader 的子类以从XML 字符串中读取并覆盖ResolveEntity() 方法,但未调用此方法。我还尝试分配自定义XmlResolver

按照建议,我也尝试过“双重编码”。不幸的是,这并没有达到预期的效果,因为解析器没有解码&amp;amp;。这是我使用的代码:

string schemaText = @"...<pattern value=""[A-Z0-9&#x26;#x20;]"" />...";
XmlWriterSettings writerSettings = new XmlWriterSettings();
writerSettings.Indent = true;
writerSettings.NewLineChars = Environment.NewLine;
writerSettings.Encoding = Encoding.Unicode;
writerSettings.CloseOutput = true;
writerSettings.OmitXmlDeclaration = false;
writerSettings.IndentChars = "\t";

StringBuilder writtenSchema = new StringBuilder();
using ( StringReader sr = new StringReader( schemaText ) )
using ( XmlReader reader = XmlReader.Create( sr ) )
using ( TextWriter tr = new StringWriter( writtenSchema ) )
using ( XmlWriter writer = XmlWriter.Create( tr, writerSettings ) )
{
   XPathDocument doc = new XPathDocument( reader );
   XPathNavigator nav = doc.CreateNavigator();

   nav.WriteSubtree( writer );
}

编写的 XML 最终结果为:

<pattern value="[A-Z0-9&amp;#x20;]" />

【问题讨论】:

    标签: .net-2.0 xml-parsing


    【解决方案1】:

    如果要保留它,则需要对其进行双重编码:&amp;amp;#x20;。 XML 阅读器翻译实体,这或多或少是 XML 的工作原理。

    【讨论】:

      【解决方案2】:
      <pattern value="[A-Z0-9&#x26;#x20;]" />
      

      我上面所做的是将“&”替换为“&”从而逃脱&符号。

      【讨论】:

      • &amp;amp; 是 XML 的一部分,并且比 &amp;#x26; 更具可读性,请尽可能使用它。
      • 谢谢。我用过 &因为我不确定命名的 &存在于 HTML 之外(在 XML 中)。
      • 谢谢你们的回复。不幸的是,我无法让它工作。我已经更新了 Q - 也许你可以看看并指出我哪里出错了?谢谢
      猜你喜欢
      • 1970-01-01
      • 2011-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多