新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   >>中国XML论坛<<     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> 关于 XML 的一般性技术讨论,提供 XML入门资料 和 XML教程
    [返回] 中文XML论坛 - 专业的XML技术讨论区XML.ORG.CN讨论区 - XML技术『 XML基础 』 → 串行化xml(三) 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 6823 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: 串行化xml(三) 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     guoyan1981 帅哥哟,离线,有人找我吗?
      
      
      等级:大二(研究C++)
      文章:35
      积分:298
      注册:2004/1/8

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给guoyan1981发送一个短消息 把guoyan1981加入好友 查看guoyan1981的个人资料 搜索guoyan1981在『 XML基础 』的所有贴子 引用回复这个贴子 回复这个贴子 查看guoyan1981的博客楼主
    发贴心情 串行化xml(三)

    由 串行化xml(一) 可以知道xml的序列化(serialization)。它是这样一个过程:得到一个对象,把对象转换为一个xml文档,并且保存它以供使用,或者把它传到网络上其他地方以供使用。在.net中,xml serialization通过检查类的属性是否被标志为read/write来工作。只要有其中一个属性,该类的值就会被取出并插入到一个xml文档里去。反序列化(de-serialization)则是一个相反的过程。
    按此在新窗口浏览图片

    将一个对象串行化为xml后,再并行化,使其还原为原来的对象有时,在并行的xml当中可能存在意外的xml节点。

    如果不处理这些意外的xml 的节点,xmlserializer将忽略这些意外的节点,如果要处理这些意外节点,可以使用xmlserializer的一下事件进行处理:

    ¨         unknownnode

    ¨         unknownelement  

    ¨         unknownattribute     

    ¨         unreferencedobject

    现在将book.xml的格式更改为:

    <?xml version="1.0" encoding="utf-8"?>

    <book id="001" xmlns:xsd="http://www.w3.org/2001/xmlschema"; xmlns:xsi="http://www.w3.org/2001/xmlschema-instance";>

           <bookid>1</bookid>

           <bookname>数学</bookname>

           <exception>some text</exception>

    </book>

    我们增加了一些意外的节点、属性,然后执行并行化过程:

    dim serializer as new xml.serialization.xmlserializer(gettype(bookshop))

            addhandler serializer.unknownattribute, addressof myunknownattribute

            addhandler serializer.unknownelement, addressof myunknownelement

            addhandler serializer.unknownnode, addressof myunknownnode
            dim reader as system.io.streamreader = new system.io.streamreader("e:\serializer\book.xml")

            dim a as bookshop = ctype(serializer.deserialize(reader), bookshop)

            reader.close()

            console.writeline("bookshop name:" & a.bookname)

            console.writeline("bookshop id:" & a.bookid)

            console.writeline("print enter to exit.............")

            console.readline()

          我们同样增加了意外节点、属性的处理代码,执行结果为:        
    按此在新窗口浏览图片
    这样我们就可以查看那些意外的节点、属性的信息了。

        另外,我们还可以灵活的控制串行化xml 的格式,这样可以很方便的与外部应用程序进行交换对象。我们可以在类中加入.net framework属性来控制串行化xml 的格式。

           imports system.xml

    imports system.xml.serialization

    <xmlroot(elementname:="root_book", namespace:="uri:mylocaluri")> _

    public class book

        <xmlelement(elementname:="book_id", namespace:="uri:mylocaluri")> public bookid as integer

        <xmlattributeattribute(attributename:="name")> _

        public bookname as string

        <xmltext()> _

        public test_text as string

        <xmlignore()> _

    public ignoretext as string

    ‘ignoretext 将不被串行化

    end class

    module serialization

        <stathread()> _

       public sub main()

            dim book as new book

            book.bookid = 1

            book.bookname = "数学"

            book.test_text = "some text"

            book.ignoretext = "ignoretext"

            dim serializer as new xml.serialization.xmlserializer(gettype(book))

            dim writer as system.io.streamwriter = new system.io.streamwriter("e:\serializer\book.xml")

            serializer.serialize(writer, book)

            writer.close()

        end sub

    end module

    则生成的xml格式为:

    <?xml version="1.0" encoding="utf-8"?>

    <root_book xmlns:xsd="http://www.w3.org/2001/xmlschema"; xmlns:xsi="http://www.w3.org/2001/xmlschema-instance"; name="数学" xmlns="uri:mylocaluri">

           <book_id>1</book_id>

    some text

    </root_book>


       收藏   分享  
    顶(0)
      




    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2004/4/5 14:45:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 XML基础 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2024/11/22 9:02:28

    本主题贴数1,分页: [1]

    管理选项修改tag | 锁定 | 解锁 | 提升 | 删除 | 移动 | 固顶 | 总固顶 | 奖励 | 惩罚 | 发布公告
    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    714.844ms