Проблема с XElement и XslCompiledTransform
-
24-10-2019 - |
Вопрос
У меня возникли проблемы с использованием комбинации XElement
и XslCompiledTransform
.Я привел пример кода, который использую, ниже.Если я получу свой входной XML, используя GetXmlDocumentXml()
метод, он работает нормально.Если я использую GetXElementXml()
вместо этого я получаю InvalidOperationException
при звонке в Transform
метод XslComiledTransform
:
Текст токена в состоянии Start приведет к созданию недопустимого XML-документа.Убедитесь, что для параметра ConformanceLevel установлено значение ConformanceLevel.Fragment или ConformanceLevel.Auto, если вы хотите записать XML-фрагмент..
А CreateNavigator
метод на обоих XElement
и XmlDocument
возвращает XPathNavigator
.Какие дополнительные вещи есть XmlDocument
при этом все работает, и как я могу сделать то же самое с XElement
?Я просто делаю что-то безумное?
static void Main(string[] args)
{
XslCompiledTransform stylesheet = GetStylesheet(); // not shown for brevity
IXPathNavigable input = this.GetXElementXml();
using (MemoryStream ms = this.TransformXml(input, stylesheet))
{
XmlReader xr = XmlReader.Create(ms);
xr.MoveToContent();
}
}
private MemoryStream TransformXml(
IXPathNavigable xml,
XslCompiledTransform stylesheet)
{
MemoryStream transformed = new MemoryStream();
XmlWriter writer = XmlWriter.Create(transformed);
stylesheet.Transform(xml, null, writer);
transformed.Position = 0;
return transformed;
}
private IXPathNavigable GetXElementXml()
{
var xml = new XElement("x", new XElement("y", "sds"));
return xml.CreateNavigator();
}
private IXPathNavigable GetXmlDocumentXml()
{
var xml = new XmlDocument();
xml.LoadXml("<x><y>sds</y></x>");
return xml.CreateNavigator();
}
Решение
О, это было легко.Решением было обернуть XElement
в XDocument
объект.Задача решена!