我需要將有效的XML文檔轉換爲OFX v1.0.2 format。這種格式或多或少是XML,但它在技術上是無效的,因此不能被解析爲XML。如何使用XSLT將XML轉換爲無效的XML?
我無法讓我的Xml轉換工作,因爲.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十歲上下的標籤時,我下載的文件。
這裏是我的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的純文本字符串?
UPDATE:
我已經改變了這個問題。我剛剛意識到原始問題的明顯答案。使用XslCompiledTransform
對象需要我使用XmlTextWriter將輸出寫入Xml文檔。顯然它不會解析。道歉。
你應該這樣做究竟說的是什麼問題的一個更好的工作。特別是,你能創建一個能夠重現問題的小例子嗎? – 2010-03-23 05:51:20
@John - 我會更新問題以包含異常和一些代碼。 – Damovisa 2010-03-23 05:54:00