#c# #xml #xslt
#c# #xml #xslt
Вопрос:
Извините, если это очевидный вопрос, но я немного расстраиваюсь, пытаясь найти ответ.
Могу ли я выполнить преобразование XSL для загруженного XML-документа на месте? То есть без необходимости создавать средство записи в документ?
Я спрашиваю, потому что у меня есть привязка XmlDocument внутри приложения WPF, которое я хочу отсортировать. Сортировка может немного усложниться, поэтому XSL показался подходящим. Вот код, на котором я застрял:
XmlDataProvider xmlDP = (XmlDataProvider)this.Resources["ItemDB"];
string xsltPath = System.Configuration.ConfigurationManager.AppSettings["XSLDirextory"];
string path = xsltPath "SortItemName.xslt";
if (System.IO.File.Exists(path))
{
XslCompiledTransform compTrans = new XslCompiledTransform();
compTrans.Load(path);
//compTrans.Transform(xmlDP.Document, new XsltArgumentList(), xmlDP.Document.XmlResolver);
}
После загрузки преобразования я хотел бы просто иметь возможность compTrans(xmlDP.Document); или что-то, что имеет тот же эффект. (для ясности, xmlDP.Document является XmlDocument ), так что XmlDocument имеет результат преобразования.
Каков наилучший способ добиться этого?
Комментарии:
1. Почему вы не хотите создавать запись в документ? На самом деле, почему бы не преобразовать документ из документа в другой документ, а затем связать новый документ?
2. Я не хотел записывать обратно в документ, потому что в копии в памяти могут быть некоторые различия. Если пользователь закрывает приложение, я не хочу, чтобы эти изменения отражались обратно в фактический документ, если пользователь явно не сохранил его. Что касается создания нового документа, я думаю, я мог бы, но, похоже, должен быть лучший способ сделать это.
Ответ №1:
Самое близкое, что вы можете сделать, это создать новый XmlDocument
с помощью, например
XmlDocument result = new XmlDocument();
using (XmlWriter xw = result.CreateNavigator().AppendChild())
{
compTrans.Transform(xmlDP.Document, null, xw);
xw.Close();
}
а затем назначьте это своему свойству:
xmlDP.Document = result;
Конечно, для этого требуется, чтобы можно было установить xmlDP.Document.
Ответ №2:
XSLT всегда создает новый документ для хранения результата преобразования, он никогда не изменяет входной документ.