【发布时间】:2016-07-04 09:47:15
【问题描述】:
我有一个想要阅读的 xml 文件。根据根标签,我之前正在执行 xsl 转换并读取修改后的文件:
XmlReader reader = XmlReader.Create(myFile);
var root = new XmlDocument();
root.Load(reader);
if (root.DocumentElement.Name == "FC_FeatureCatalogue")
{
var xsltDoc = new XmlDocument();
xsltDoc.Load("myXslt.xsl"));
XsltSettings xsltSettings = new XsltSettings(false, true);
var transformer = new XslCompiledTransform();
transformer.Load(xsltDoc, xsltSettings, new XmlUrlResolver());
using (var stream = new FileStream(newFileName, FileMode.Create))
{
transformer.Transform(reader, new XsltArgumentList(), stream);
}
}
当条件通过时,由newFileName 确定的文件被创建。但是,它确实只包含一个空条目。所以我调试了一下,注意到在调用root.Load(reader) 时,文件被读取到EOF。这就是为什么我假设当使用相同的文件进行转换时,转换器根本不做任何事情,因为读者没有更多的内容。
那么有没有办法重新设置阅读器(我知道,XmlReader 是“仅转发”)或者在不读取 EOF 的情况下获取原始 xml 文件的根标记并对其进行转换?
编辑:为了验证我的假设,我还在using-block 中添加了这些行:
using (var stream = new FileStream(newFileName, FileMode.Create))
{
reader.Close();
reader = XmlReader.Create(myFile);
transformer.Transform(reader, new XsltArgumentList(), stream);
}
现在创建的文件包含所有预期的数据。不过,我希望有一种方法可以读取根标签并转换文件,而无需重新编辑整个文件。
【问题讨论】:
-
试试这个:XmlReader reader = XmlReader.Create(myFile); reader.MoveToContent(); if (reader.Name == "FC_FeatureCatalogue") { }
-
@jdweng Yeap,成功了。