質問

私はXslCompiledTransformではを使用しよう、とXPathDocumentオブジェクトとして出力を使用しています。

任意のアイデア?

役に立ちましたか?

解決

XmlTextWriterに基づいてStringWriterに変換を送信します。その後、インスタンスXPathDocumentからXML文字列をretreivingによってStringWriterます。

var sw = new StringWriter();
var xtw = new XmlTextWriter(sw);

myTransform.Transform(myXml, xtw);

var xpd = new XPathDocument(sw.ToString());

そのない最もメモリ効率的なメカニズムが、ほとんどのニーズには十分だろう。同様のアプローチを比較することによって代わりにMemoryStreamStringWriterが、その少し厄介を使うだろう。

他のヒント

氏。ジョーンズの答えは私にとって非常に有用だったが、私は最後の行は動作しませんでしたことがわかりました。私はこれをやってしまった。

XslCompiledTransform xsl = new XslCompiledTransform();
xsl.Load(filePath);
StringWriter stringWriter = new StringWriter();
XmlWriter xmlWriter = XmlTextWriter.Create(stringWriter);
xsl.Transform(xPathDoc, xmlWriter);
String newXml = stringWriter.ToString();
StringReader stringReader = new StringReader(newXml);
xPathDoc = new XPathDocument(stringReader);

(ここで、xPathDocはすでにXmlReaderから初期化されているXPathDocumentオブジェクトである。)

デイビッドM.アンダーソンの答えのAわずかに良い形は以下の通りです:それは、潜在的なリソースリークに悩まされません。それ以外の場合は同じです。

private static XPathDocument TransformToXPathDocument(string styleSheetPath,
                                                      IXPathNavigable xPathDoc)
{
    var xsl = new XslCompiledTransform();
    xsl.Load(styleSheetPath);
    using(var stringWriter = new StringWriter())
    {
        using(XmlWriter xmlWriter = XmlWriter.Create(stringWriter))
        {
            xsl.Transform(xPathDoc, xmlWriter);
        }
        using(var reader = new StringReader(stringWriter.ToString()))
        {
            return new XPathDocument(reader);
        }
    }
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top