我正在尝试实现一些函数,这些函数将使用 XslCompiledTransform 将一个对象转换为另一个对象。
我找到了一些将对象序列化为 XML 字符串并将 XML 字符串反序列化为对象的实现。
另一个函数执行从 object1 到 obejbct2 的 XslCompiledTransform。
为了生成 XSLT 文件,我使用了 Altova MapForce,只加载了序列化对象的 XML 并映射了一些属性。
现在解决问题:
- 首先我注意到 XslCompiledTransform 不适用于 XSLT 2.0 版。有没有与 XSLT 2.0 一起使用的更新函数?也许一些设置?
- 其次,在尝试将 XML 反序列化为对象时出现异常:“反序列化 myObject 类型的对象时出错,输入字符串格式不正确。” 我不明白问题出在哪里。有没有人有做这种事情的示例代码?我在谷歌中找到的只是 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();
}
}
谢谢分配,
暗里。