首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XslCompiledTransform与系列化

XslCompiledTransform与系列化
EN

Stack Overflow用户
提问于 2009-08-17 14:51:53
回答 1查看 4K关注 0票数 1

我正在尝试实现一些使用XslCompiledTransform将一个对象转换为另一个对象的函数。

我找到了一些将对象序列化为XML和将DeSerialize字符串序列化为对象的实现。

另一个函数执行XslCompiledTransform (从object1到obejbct2 )。

为了生成XSLT文件,我使用了Altova MapForce,只是加载了序列化对象的XML并映射了一些属性。

现在我们来谈谈问题:

  • 首先注意到XslCompiledTransform不适用于XSLT2.0版本。是否有新的函数可以使用XSLT2.0?也许我在尝试将XML转换为对象时遇到了一些异常:“反序列化settings?
  • secondly类型的对象时出错了,myObject输入字符串的格式不正确。”我不明白问题在哪里。有人有这样的示例代码吗?我在google中发现的只是HTML代码的转换,而不是对象。

以下是功能:

代码语言:javascript
复制
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();
        }
    }

谢谢分配,

奥姆里。

EN

回答 1

Stack Overflow用户

发布于 2009-08-17 15:06:22

  • XslCompiledTransform不支持XSLT2.0。事实上,XSLT2.0在.NET框架中根本不受支持(您可以尝试.NET的Saxon,但要知道这只是运行在IKVM中的Java )。从您的描述来看,
  • --我不明白为什么要通过XML绕道将一个对象转换成另一个对象。为什么不简单地在目标对象中提供一个构造函数,将输入对象作为参数呢?然后,可以对该构造函数中的所有映射进行编码。这不仅比序列化、转换和反序列化对象更有效,您还将获得C#.

的类型安全性。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1288410

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档