1

と の組み合わせの使用に問題がXElementありXslCompiledTransformます。私が使用しているサンプルコードを以下に置きます。GetXmlDocumentXml()メソッドを使用して入力 XML を取得すると、問題なく動作します。GetXElementXml()代わりにメソッドを使用すると、次のメソッドをInvalidOperationException呼び出すときに次のようになります。TransformXslComiledTransform

Start 状態のトークン テキストは、無効な XML ドキュメントになります。XML フラグメントを作成する場合は、ConformanceLevel 設定が ConformanceLevel.Fragment または ConformanceLevel.Auto に設定されていることを確認してください

と の両方のCreateNavigatorメソッドはXElementXmlDocument返しますXPathNavigatorXmlDocumentこれがすべて機能するように、どのような追加機能が行われてい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();
}
4

1 に答える 1

3

ああ、それは簡単でした。XElement解決策は、 をXDocumentオブジェクトでラップすることでした。問題が解決しました!

于 2010-06-08T14:52:19.150 に答える