来自字符串内容的 XMLReader
Posted
技术标签:
【中文标题】来自字符串内容的 XMLReader【英文标题】:XMLReader from a string content 【发布时间】:2011-05-29 22:43:02 【问题描述】:我正在尝试使用 XslTransform 从另一个 XML 生成 XML。我将两个文件(源 XML 和 XSL 转换文件)都作为字符串内容获取,因此我试图将 XSL 文件作为 XmlReader 传递给 XslTransform.Load() 方法。现在必须从包含 XSL 文件的源字符串创建 XmlReader,所以我尝试这样做:
MemoryStream memStream = new MemoryStream();
byte[] data = Encoding.Default.GetBytes(transformation.XsltContent);
memStream.Write(data, 0, data.Length);
memStream.Position = 0;
XmlReader reader = XmlReader.Create(memStream);
还尝试使用 StringReader:
XmlReader reader = XmlReader.Create(new StringReader(transformation.XsltContent));
不幸的是,机器人方法似乎不起作用,输入似乎没问题,我什至尝试创建一些基本的单元素 XML 来传递,也不起作用 - 阅读器包含 None。
有人能指出这里的问题吗?
【问题讨论】:
“似乎不起作用”相当广泛。你能解释一下 what 不起作用吗?包括任何错误和异常信息。 您是否使用 XmlReader.close() 关闭了 xmlreader,或者将其包含在 using 语句中? reader = None - 这就是我在调用 XmlReader reader = XmlReader.Create(memStream) 后在调试器中看到的,所以我没有合适的值传递给 XsltTransform.Load(reader) 同样的问题,我得到一个异常,但没有细节 【参考方案1】:XmlReader xmlReader = XmlReader.Create(new StringReader(YourStringValue));
【讨论】:
你应该处理掉那个 StringReader,也许可以使用using
。
@NikolaMalešević XmlReader
被处理时它不会被处理?
记住:XmlReader 和 StringReader 实现 IDisposable。
来自the docs for StringReader:“这种类型实现了IDisposable接口,但实际上并没有任何资源可以释放。这意味着通过直接调用Dispose()或使用诸如using(在 C# 中)或 Using(在 Visual Basic 中)不是必需的。”【参考方案2】:
StringReader -> XmlReader 方法很好,你应该坚持下去。读者没有报告,因为它还没有被阅读。尝试调用 Read() 看看会发生什么。转换也会对其调用 read。
【讨论】:
我同意 fejesjoco 的观点,在 StringReader 上创建 XmlReader 很好,只需将其传递给 XslCompiledTransform 的 Load 方法(或 XslTransform,如果您仍然使用 .NET 1.x)。不要担心调试器在创建后为 XmlReader 显示None
,这没关系,Load 会很好地消耗那个 XmlReader。
记住:XmlReader 和 StringReader 实现 IDisposable。以上是关于来自字符串内容的 XMLReader的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法让 XmlReader 将字符引用保留为文本而不是转换它?
在 .NET 中使用 XmlReader 取消转义 XML 实体?
在 XmlReader .NET 4.0 中加载失败目录文件