我有一個我想讀取的xml文件。前視根標籤I'm做一個XSL變換和讀取修改的文件:根據根標記轉換xml文件
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
是「只向前」)或者替代地獲取原始xml文件的根標籤而不讀取EOF並將其轉換?
編輯:爲了驗證我的假設,我也加了我using
- 塊中的這些行:
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
@jdweng Yeap,那就是訣竅。 – HimBromBeere