XmlDocument на месте преобразования с помощью XSL - PullRequest
1 голос
/ 04 ноября 2011

Извините, если это очевидный вопрос, но я немного расстроен, пытаясь найти ответ.

Могу ли я выполнить XSL-преобразование на месте загруженного XmlDocument на месте?То есть без необходимости создания средства записи в документе?

Я спрашиваю, потому что у меня есть привязка 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 имеет результат преобразования.

Какой лучший способ сделать это?

Ответы [ 2 ]

2 голосов
/ 04 ноября 2011

Самое близкое, что вы можете сделать, это создать новый XmlDocument, например,

XmlDocument result = new XmlDocument();
using (XmlWriter xw = result.CreateNavigator().AppendChild())
{
  compTrans.Transform(xmlDP.Document, null, xw);
  xw.Close();
}

, а затем присвойте это свойству:

xmlDP.Document = result;

Конечно, для этого необходимо установить xmlDP.Document.

0 голосов
/ 04 ноября 2011

XSLT всегда создает новый документ для хранения результата преобразования, он никогда не изменяет входной документ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...