と の組み合わせの使用に問題がXElement
ありXslCompiledTransform
ます。私が使用しているサンプルコードを以下に置きます。GetXmlDocumentXml()
メソッドを使用して入力 XML を取得すると、問題なく動作します。GetXElementXml()
代わりにメソッドを使用すると、次のメソッドをInvalidOperationException
呼び出すときに次のようになります。Transform
XslComiledTransform
Start 状態のトークン テキストは、無効な XML ドキュメントになります。XML フラグメントを作成する場合は、ConformanceLevel 設定が ConformanceLevel.Fragment または ConformanceLevel.Auto に設定されていることを確認してください。
と の両方の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();
}