Je rencontre des problèmes en utilisant une combinaison de XElement
et XslCompiledTransform
. J'ai mis l'exemple de code que j'utilise ci-dessous. Si je reçois mon entrée XML en utilisant la méthode GetXmlDocumentXml()
, cela fonctionne très bien. Si j'utilise la méthode à la place GetXElementXml()
, je reçois un InvalidOperationException
lorsque vous appelez la méthode Transform
de XslComiledTransform
:Problème avec XElement et XslCompiledTransform
texte Token dans l'état de départ entraînerait un document XML non valide. Assurez-vous que le paramètre ConformanceLevel est défini sur ConformanceLevel.Fragment ou ConformanceLevel.Auto si vous souhaitez écrire un fragment XML.
La méthode CreateNavigator
à la fois sur XElement
et XmlDocument
renvoie un XPathNavigator
. Qu'est-ce que les 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 quelque chose de fou?
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();
}