Как я могу преобразовать XML в недействительный XML с помощью XSLT?
Вопрос
Мне нужно преобразовать действительный XML -документ в OFX V1.0.2 Формат. Анкет Этот формат более или менее XML, но он технически недействителен и, следовательно, не может быть проанализирован как XML.
У меня проблемы с тем, чтобы работать с XML работать, потому что .NET .NET XslCompiledTransform
Объект настаивает на интерпретации вывода как документа XML (что достаточно справедливо).
** Вот моя функция, чтобы преобразовать XML
public string Transform(XmlElement xmlElement, Dictionary<string, object> parameters)
{
string strReturn = "";
// Set the settings to allow scripts to executed.
XsltSettings settings = new XsltSettings(false, true);
// Load the XSLT Document
XslCompiledTransform xslt = new XslCompiledTransform();
xslt.Load(xsltFileName, settings, new XmlUrlResolver());
// arguments
XsltArgumentList args = new XsltArgumentList();
if (parameters != null && parameters.Count > 0)
{
foreach (string key in parameters.Keys)
{
args.AddParam(key, "", parameters[key]);
}
}
//Create a memory stream to write to
Stream objStream = new MemoryStream();
// Transform the xml/xslt into a Writer
XmlTextWriter xmlWriter = new XmlTextWriter(objStream, Encoding.UTF8);
// Apply the transform
xslt.Transform(xmlElement, args, xmlWriter);
objStream.Seek(0, SeekOrigin.Begin);
// Read the contents of the stream
StreamReader objSR = new StreamReader(objStream);
strReturn = objSR.ReadToEnd();
return strReturn;
}
Если я убегу из тегов XML-ISH, используя <
а также >
, их удаляют при загрузке файла.
Вот начало моего XSLT:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="text"></xsl:output>
<xsl:param name="currentdate"></xsl:param>
<xsl:template match="Transactions">
OFXHEADER:100
DATA:OFXSGML
VERSION:102
SECURITY:NONE
ENCODING:USASCII
CHARSET:1252
COMPRESSION:NONE
OLDFILEUID:NONE
NEWFILEUID:NONE
<OFX>
<SIGNONMSGSRSV1>
<SONRS>
<STATUS>
<CODE>0
<SEVERITY>INFO
</STATUS>
<DTSERVER><xsl:value-of select="$currentdate" />
<LANGUAGE>ENG
Так могу ли я преобразовать свой XML в простую текстовую строку?
ОБНОВИТЬ:
Я изменил этот вопрос. Я только что понял очевидный ответ на оригинальный вопрос. С использованием XslCompiledTransform
Объект требует, чтобы я написал вывод в документ XML, используя XMLTextWriter. Очевидно, это не будет разрядка. Извинения.
Решение
XSLT может выводить текст; Просто убедитесь, что вы установите режим вывода XSLT на текст, и WRIET TextWriter
(Доступно несколько перегрузки). Написание чего -то, что есть Около XML в XSLT болезнен, но возможно с отключением правил побега.
Вот пример (хотя и безобразный) XSLT для написания не XML:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
>
<xsl:output method="text" indent="yes"/>
<xsl:template match="@* | node()">
<xsl:call-template name="startElement">
<xsl:with-param name="name" select="'SONRS'"/>
</xsl:call-template>
<xsl:call-template name="startElement">
<xsl:with-param name="name" select="'STATUS'"/>
<xsl:with-param name="value" select="0"/>
</xsl:call-template>
<xsl:call-template name="startElement">
<xsl:with-param name="name" select="'SEVERITY'"/>
<xsl:with-param name="value" select="'INFO'"/>
</xsl:call-template>
<xsl:call-template name="endElement">
<xsl:with-param name="name" select="'SONRS'"/>
</xsl:call-template>
</xsl:template>
<xsl:template name="startElement">
<xsl:param name="name"/>
<xsl:param name="value"/>
<xsl:text disable-output-escaping="yes"><</xsl:text>
<xsl:value-of select="$name"/>
<xsl:text disable-output-escaping="yes">></xsl:text>
<xsl:value-of select="$value"/>
</xsl:template>
<xsl:template name="endElement">
<xsl:param name="name"/>
<xsl:text disable-output-escaping="yes"></</xsl:text>
<xsl:value-of select="$name"/>
<xsl:text disable-output-escaping="yes">></xsl:text>
</xsl:template>
</xsl:stylesheet>