.net-2.0 - 解析包含 " "(必须保留)的 XML 字符串

标签 .net-2.0 xml-parsing

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

我有什么办法可以实现这一目标吗?

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

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

我愿意 不是 希望将其转换为:
<pattern value="[A-Z0-9 ]" />

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

我曾尝试创建 XmlTextReader 的子类从 XML 字符串中读取并覆盖 ResolveEntity()方法,但这没有被调用。我也试过分配一个自定义 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;]" />

最佳答案

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

关于.net-2.0 - 解析包含 "&#x20;"(必须保留)的 XML 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2764485/

相关文章:

xml - 使用Notepad++,如何选择整个XML节点?

python - 我想使用 lxml 删除花括号和 XML 命名空间,只报告标签名称

.net-2.0 - 如何判断 ASP.net 页面上是否存在具有给定 src 属性的 &lt;script&gt; 标记?

.net - 在 DataGridView 中排序时等待光标

asp.net - 从 ASP.Net Web 服务 json 输出中删除 "d"对象

xml - 如何 grep 我的 xml 文件并保存输出?

java - 无法从 try-catch 嵌套 for 循环中提取字符串

android - 无法使用 XML 解析从 XML 中获取内部节点列表数据

c# - 将 Dictionary<MyType>.ValueCollection 转换为 IList<MyType>

.net - 相同的代码在不同的服务器上产生不一致的图像质量