XslCompiledTransform を使用して、あるオブジェクトを別のオブジェクトに変換する関数をいくつか実装しようとしています。
オブジェクトを XML 文字列にシリアライズし、XML 文字列をオブジェクトにデシリアライズするための実装をいくつか見つけました。
別の関数は、object1 から obejbct2 への XslCompiledTransform を実行します。
XSLT ファイルを生成するために、Altova MapForce を使用し、シリアル化されたオブジェクトの XML をロードし、いくつかの属性をマップしました。
問題は次のとおりです。
- 最初に、XslCompiledTransform が XSLT バージョン 2.0 で動作しないことに気付きました。XSLT 2.0 で動作する新しい関数はありますか? 多分いくつかの設定?
- 次に、XML をオブジェクトにデシリアライズしようとすると、例外が発生します。どこに問題があるのか わかりません。そのようなことを行うサンプルコードはありますか? 私がグーグルで見つけたのは、HTMLコードの変換であり、オブジェクトではありません。
関数は次のとおりです。
private static string runXSLT(string xsltFile, string inputXML)
{
XmlDocument XmlDoc = new XmlDocument();
// Load the style sheet.
XslCompiledTransform xslt = new XslCompiledTransform(true);
xslt.Load(xsltFile);
StringReader StrReader = new StringReader(inputXML);
XmlTextReader XmlReader = new XmlTextReader(StrReader);
//Create an XmlTextWriter which outputs to memory stream
Stream stream = new MemoryStream();
XmlWriter writer = new XmlTextWriter(stream, Encoding.UTF8);
// Execute the transform and output the results to a file.
xslt.Transform(XmlReader, writer);
stream.Position = 0;
XmlDoc.Load(stream);
return XmlDoc.InnerXml;
}
public static string SerializeAnObject(object AnObject)
{
XmlDocument XmlDoc = new XmlDocument();
DataContractSerializer xmlDataContractSerializer = new DataContractSerializer(AnObject.GetType());
MemoryStream MemStream = new MemoryStream();
try
{
xmlDataContractSerializer.WriteObject(MemStream, AnObject);
MemStream.Position = 0;
XmlDoc.Load(MemStream);
return XmlDoc.InnerXml;
}
finally
{
MemStream.Close();
}
}
public static Object DeSerializeAnObject(string XmlOfAnObject, Type ObjectType)
{
StringReader StrReader = new StringReader(XmlOfAnObject);
DataContractSerializer xmlDataContractSerializer = new DataContractSerializer(ObjectType);
XmlTextReader XmlReader = new XmlTextReader(StrReader);
try
{
Object AnObject = xmlDataContractSerializer.ReadObject(XmlReader);
return AnObject;
}
finally
{
XmlReader.Close();
StrReader.Close();
}
}
おかげさまで、
オムリ。