用Eclipse Modeling Framework读写XML

  1. 编写Schema

    1. 模型

    图书馆管理书(Book)和作者(Writer),书有书的目录(BookCategory)。

    1. 代码

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

    <xsd:schema xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:lib="http://www.example.eclipse.org/Library" xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.eclipse.org/Library">

        <xsd:complexType name="Book">

            <xsd:sequence>

                <xsd:element name="title" type="xsd:string"/>

                <xsd:element name="pages" type="xsd:int"/>

                <xsd:element name="category" type="lib:BookCategory"/>

                <xsd:element name="author" type="xsd:anyURI"/>

            </xsd:sequence>

        </xsd:complexType>

        <xsd:complexType name="Writer">

            <xsd:sequence>

                <xsd:element name="name" type="xsd:string"/>

                <xsd:element name="books" type="xsd:anyURI" minOccurs="0" maxOccurs="unbounded"/>

            </xsd:sequence>

        </xsd:complexType>

        <xsd:complexType name="Library">

            <xsd:sequence>

                <xsd:element name="name" type="xsd:string"/>

                <xsd:element name="writers" type="lib:Writer" minOccurs="0" maxOccurs="unbounded"/>

                <xsd:element name="books" type="lib:Book" minOccurs="0" maxOccurs="unbounded"/>

            </xsd:sequence>

        </xsd:complexType>

        <xsd:simpleType name="BookCategory">

            <xsd:restriction base="xsd:NCName">

                <xsd:enumeration value="Mystery"/>

                <xsd:enumeration value="ScienceFiction"/>

                <xsd:enumeration value="Biography"/>

            </xsd:restriction>

        </xsd:simpleType>

    </xsd:schema>

    1. Schema表述

  2. 导入EMF

    1. 新建EMF项目

    1. 选择导入器

    1. 选择导入的包

    1. 查看模型

    1. 修改模型属性

    1. 生成模型代码

    1. 查看模型代码

    1. Book接口和Writer接口

    1. BookCategory枚举

    1. Library接口

    1. LibraryFactory工厂

    1. EPackage接口

    1. 查看模型实现的代码

    1. 查看模型操作方式

  3. 编写Java代码操作模型

    1. 新建程序主入口类

    1. 创建Library实例

      LibraryFactory factory = LibraryFactory.eINSTANCE;

    2. 创建Library、Book和Writer实例

              Library library = factory.createLibrary();

       

              Book book = factory.createBook();

       

              Writer writer = factory.createWriter();

    3. 对模型进行操作

      1. 写模型

                library.setName("UESTC Library");

         

                writer.setName("William Shakespeare");

         

                book.setTitle("King Lear");

                book.getAuthor().add(writer);

                

                library.getBooks().add(book);

                library.getWriters().add(writer);

      2. 读模型

                System.out.println("Shakespeare books:");

                for (Iterator<Book> iter = writer.getBooks().iterator(); iter.hasNext();)

                {

                    Book shakespeareBook = (Book) iter.next();

                    System.out.println(" title: " + shakespeareBook.getTitle());

             }

    4. 把模型保存到XML文件中

      1. 创建资源集

                // Create a resource set.

                ResourceSet resourceSet = new ResourceSetImpl();

         

                // Register the default resource factory -- only needed for stand-alone!

                resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap()

                        .put(Resource.Factory.Registry.DEFAULT_EXTENSION,

                                new LibraryResourceFactoryImpl());

         

                // Get the URI of the model file.

                URI fileURI = URI.createFileURI(new File("mylibrary.xml")

                        .getAbsolutePath());

         

                // Create a resource for this file.

                Resource resource = resourceSet.createResource(fileURI);

      2. 把模型添加到资源集中

                // Add the book and writer objects to the contents.

                resource.getContents().add(library);

      3. 保存资源集到XML文件中

                try

                {

                    resource.save(Collections.EMPTY_MAP);

                }

                catch (IOException e)

                {

                }

      4. 查看XML文件

        <?xml version="1.0" encoding="ASCII"?>

        <library:Library xmlns:library="http://www.example.eclipse.org/Library">

        <name>UESTC Library</name>

        <writers>

        <name>William Shakespeare</name>

        <books>#//@books.0</books>

        </writers>

        <books>

        <title>King Lear</title>

        <author>#//@writers.0</author>

        </books>

        </library:Library>

    5. 从XML文件中读取资源

      1. 创建资源集

                // Create a resource set.

                ResourceSet resourceSet2 = new ResourceSetImpl();

         

                // Register the default resource factory -- only needed for stand-alone!

                resourceSet2.getResourceFactoryRegistry().getExtensionToFactoryMap()

                        .put(Resource.Factory.Registry.DEFAULT_EXTENSION,

                                new LibraryResourceFactoryImpl());

         

                // Register the package -- only needed for stand-alone!

                LibraryPackage libraryPackage = LibraryPackage.eINSTANCE;

         

                // Get the URI of the model file.

                URI fileURI2 = URI.createFileURI(new File("mylibrary.xml")

                        .getAbsolutePath());

      2. 读取资源

                // Demand load the resource for this file.

                Resource resource2 = resourceSet2.getResource(fileURI2, true);

      3. 获得需要的内容

                Library library2 = (Library)resource2.getContents().get(0);

                Book book2 = library2.getBooks().get(0);

                System.out.println("title:" + book2.getTitle());

  4. 自动生成资源编辑器

    1. 编辑器

    左边是XML树,右边是节点属性。

转载于:https://www.cnblogs.com/autosar/archive/2010/03/16/1687622.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值