VB 2010 XSLCompileDTransformは、URIディスクファイルからの代わりに文字列から変換する必要があります。

StackOverflow https://stackoverflow.com//questions/11694424

質問

次のコードは、ローカルディスクからXSLとXMLを取り出し、変換されたXMLを変数XtransOutputに返します。

Dim XmlInputPath As String = "C:\Any.XML"
Dim XslInputPath As String = "C:\Any.XSL"

Dim StringWriter As New System.IO.StringWriter
Dim XsltTransformation As New XslCompiledTransform(True)
Dim XsltArgumentList As New XsltArgumentList
Dim Xtransoutput As String = Nothing

XsltTransformation.Load(XslInputPath)
XsltTransformation.Transform(XmlInputPath, XsltArgumentList, StringWriter)
Xtransoutput = StringWriter.ToString
.

私の問題は、XMLとXSLの両方がすでに別々の文字列に入っていますが、それらはディスク上ではなく、セキュリティ上の理由からディスクに書き込むことはできません。ディスクファイルからではなく文字列から作業する方法についての提案はありますか?

tia!

役に立ちましたか?

解決

ここはC#例 - それをVbに変換することを読者に運動させたままにしてください:))

using System;
using System.IO;
using System.Xml;
using System.Xml.Xsl;

namespace XsltInMemory
{
    class XsltInMemory
    {
        static void Main(string[] args)
        {
            XmlDocument doc = new XmlDocument();
            XslCompiledTransform xslt = new XslCompiledTransform();

            doc.LoadXml("<t/>");

            StringReader sr = new StringReader(

@"<xsl:stylesheet version='1.0'
 xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
 <xsl:output omit-xml-declaration='yes' indent='yes'/>

 <xsl:template match='node()|@*'>
  <xsl:copy>
   <xsl:apply-templates select='node()|@*'/>
  </xsl:copy>
 </xsl:template>
</xsl:stylesheet>"

            );

            MemoryStream ms = new MemoryStream();

            xslt.Load(new XmlTextReader(sr));

            xslt.Transform(doc, null, ms);

            ms.Flush();
            ms.Position = 0;

            StreamReader sr2 = new StreamReader(ms);

            Console.Write(sr2.ReadToEnd());
        }
    }
}
.

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