分析包含“ ”的 XML 字符串(必须保留)

Parsing an XML string containing " " (which must be preserved)

提问人:Zoodor 提问时间:5/4/2010 最后编辑:Zoodor 更新时间:5/4/2010 访问量:21231

问:

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

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

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

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

不希望它被转换为:

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

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

我尝试创建一个子类来从 XML 字符串中读取并覆盖该方法,但这没有被调用。我还尝试分配一个自定义.XmlTextReaderResolveEntity()XmlResolver

正如建议的那样,我也尝试过“双重编码”。不幸的是,这没有达到预期的效果,因为解析器没有解码。这是我使用的代码:&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 分析

评论


答:

2赞 Williham Totland 5/4/2010 #1

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

1赞 Delan Azabani 5/4/2010 #2
<pattern value="[A-Z0-9&#x26;#x20;]" />

我上面所做的是将“&”替换为“&#x26;”,从而转义了与号。

评论

0赞 Williham Totland 5/4/2010
&amp;是 XML 的一部分,并且比 更易读,尽可能使用它。&#x26;
0赞 Delan Azabani 5/4/2010
谢谢你。我用了 &#x26;因为我不确定命名 &存在于 HTML 之外(在 XML 中)。
0赞 Zoodor 5/4/2010
谢谢你们的回复。不幸的是,我无法让它工作。我已经更新了 Q - 也许你可以看看并指出我哪里出了问题?谢谢