Problème avec XElement et XslCompiledTransform
-
24-10-2019 - |
Question
Je vais avoir quelques problèmes en utilisant une combinaison de XElement
et XslCompiledTransform
. J'ai mis le code échantillon j'utilise ci-dessous. Si je reçois mon XML d'entrée en utilisant la méthode GetXmlDocumentXml()
, il fonctionne très bien. Si j'utilise plutôt la méthode de GetXElementXml()
, je reçois un InvalidOperationException
lorsque vous appelez la méthode Transform
de XslComiledTransform
:
Texte Jeton dans l'état de démarrage entraînerait un document XML non valide. Assurez-vous que le paramètre est réglé sur ConformanceLevel ConformanceLevel.Fragment ou ConformanceLevel.Auto si vous voulez écrire un fragment XML .
La méthode de CreateNavigator
sur les deux retours de XElement
et XmlDocument
un XPathNavigator
. Qu'est-ce que des choses supplémentaires est XmlDocument
Ce faisant, tout cela fonctionne, et comment puis-je faire la même chose avec XElement
? Est-ce que je fais juste fou quelque chose?
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();
}
La solution
Oh, qui était facile. La solution consistait à envelopper le XElement
dans un objet XDocument
. résolu problème!