質問

の組み合わせを使用するのに苦労しています XElementXslCompiledTransform. 。以下で使用しているサンプルコードを配置しました。入力XMLを使用して取得した場合 GetXmlDocumentXml() 方法、正常に動作します。使用する場合 GetXElementXml() 代わりに、私は取得します InvalidOperationException 電話するとき Transform の方法 XslComiledTransform:

状態開始のトークンテキストは、無効なXMLドキュメントになります。 XMLフラグメントを書きたい場合は、コンフォルマンセレベルの設定が順調に設定されていることを確認してください。.

CreateNavigator 両方の方法 XElementXmlDocument andを返します 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();
}
役に立ちましたか?

解決

ああ、それは簡単でした。解決策は、包むことでした XElementXDocument 物体。問題が解決しました!

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top