VB 2010 XSLCompileDtransform должен преобразовать из строки, а не из файла диска URI
-
12-12-2019 - |
Вопрос
Следующий код работает и принимает 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());
}
}
}
. Не связан с StackOverflow