Я пытаюсь преобразовать один формат XML в другой, используя XSL. Попробуйте, как я мог, я не могу получить результат.
Я уже давно этим занимался, и у меня не было успеха. Я даже не получаю никаких исключений. Я собираюсь опубликовать весь код, и, надеюсь, кто-то может помочь мне разобраться, что я сделал неправильно.
Я знаю, что в xsl у меня могут быть проблемы с выбором и совпадением, но в данный момент я не беспокоюсь об этом.
Вывод, который я получаю - это ввод XML без каких-либо тегов XML . Преобразование просто не происходит.
Вот мой XML-документ:
<?xml version="1.0"?>
<Transactions>
<Account>
<PersonalAccount>
<AccountNumber>066645621</AccountNumber>
<AccountName>A Smith</AccountName>
<CurrentBalance>-200125.96</CurrentBalance>
<AvailableBalance>0</AvailableBalance>
<AccountType>LOAN</AccountType>
</PersonalAccount>
</Account>
<StartDate>2010-03-01T00:00:00</StartDate>
<EndDate>2010-03-23T00:00:00</EndDate>
<Items>
<Transaction>
<ErrorNumber>-1</ErrorNumber>
<Amount>12000</Amount>
<Reference>Transaction 1</Reference>
<CreatedDate>0001-01-01T00:00:00</CreatedDate>
<EffectiveDate>2010-03-15T00:00:00</EffectiveDate>
<IsCredit>true</IsCredit>
<Balance>-324000</Balance>
</Transaction>
<Transaction>
<ErrorNumber>-1</ErrorNumber>
<Amount>11000</Amount>
<Reference>Transaction 2</Reference>
<CreatedDate>0001-01-01T00:00:00</CreatedDate>
<EffectiveDate>2010-03-14T00:00:00</EffectiveDate>
<IsCredit>true</IsCredit>
<Balance>-324000</Balance>
</Transaction>
</Items>
</Transactions>
Вот мой XSLT:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" />
<xsl:param name="currentdate"></xsl:param>
<xsl:template match="Transactions">
<xsl:element name="OFX">
<xsl:element name="SIGNONMSGSRSV1">
<xsl:element name="SONRS">
<xsl:element name="STATUS">
<xsl:element name="CODE">0</xsl:element>
<xsl:element name="SEVERITY">INFO</xsl:element>
</xsl:element>
<xsl:element name="DTSERVER"><xsl:value-of select="$currentdate" /></xsl:element>
<xsl:element name="LANGUAGE">ENG</xsl:element>
</xsl:element>
</xsl:element>
<xsl:element name="BANKMSGSRSV1">
<xsl:element name="STMTTRNRS">
<xsl:element name="TRNUID">1</xsl:element>
<xsl:element name="STATUS">
<xsl:element name="CODE">0</xsl:element>
<xsl:element name="SEVERITY">INFO</xsl:element>
</xsl:element>
<xsl:element name="STMTRS">
<xsl:element name="CURDEF">AUD</xsl:element>
<xsl:element name="BANKACCTFROM">
<xsl:element name="BANKID">RAMS</xsl:element>
<xsl:element name="ACCTID"><xsl:value-of select="Account/PersonalAccount/AccountNumber" /></xsl:element>
<xsl:element name="ACCTTYPE"><xsl:value-of select="Account/PersonalAccount/AccountType" /></xsl:element>
</xsl:element>
<xsl:element name="BANKTRANLIST">
<xsl:element name="DTSTART"><xsl:value-of select="StartDate" /></xsl:element>
<xsl:element name="DTEND"><xsl:value-of select="EndDate" /></xsl:element>
<xsl:for-each select="Items/Transaction">
<xsl:element name="STMTTRN">
<xsl:element name="TRNTYPE"><xsl:choose><xsl:when test="IsCredit">CREDIT</xsl:when><xsl:otherwise>DEBIT</xsl:otherwise></xsl:choose></xsl:element>
<xsl:element name="DTPOSTED"><xsl:value-of select="EffectiveDate" /></xsl:element>
<xsl:element name="DTUSER"><xsl:value-of select="CreatedDate" /></xsl:element>
<xsl:element name="TRNAMT"><xsl:value-of select="Amount" /></xsl:element>
<xsl:element name="FITID" />
<xsl:element name="NAME"><xsl:value-of select="Reference" /></xsl:element>
<xsl:element name="MEMO"><xsl:value-of select="Reference" /></xsl:element>
</xsl:element>
</xsl:for-each>
</xsl:element>
<xsl:element name="LEDGERBAL">
<xsl:element name="BALAMT"><xsl:value-of select="Account/PersonalAccount/CurrentBalance" /></xsl:element>
<xsl:element name="DTASOF"><xsl:value-of select="EndDate" /></xsl:element>
</xsl:element>
</xsl:element>
</xsl:element>
</xsl:element>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
Вот мой метод преобразования моего XML:
public string TransformToXml(XmlElement xmlElement, Dictionary<string, object> parameters)
{
string strReturn = "";
// Load the XSLT Document
XslCompiledTransform xslt = new XslCompiledTransform();
xslt.Load(xsltFileName);
// 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();
// Apply the transform
xslt.Transform(xmlElement, args, objStream);
objStream.Seek(0, SeekOrigin.Begin);
// Read the contents of the stream
StreamReader objSR = new StreamReader(objStream);
strReturn = objSR.ReadToEnd();
return strReturn;
}
Содержимое strReturn представляет собой тег XML (<?xml version="1.0" encoding="utf-8"?>
), за которым следует необработанный дамп содержимого исходного документа XML без тегов XML.
Что я здесь не так делаю?