CN109597917A - 将XML Schema文档转换为XSL文档的方法 - Google Patents
将XML Schema文档转换为XSL文档的方法 Download PDFInfo
- Publication number
- CN109597917A CN109597917A CN201811208124.3A CN201811208124A CN109597917A CN 109597917 A CN109597917 A CN 109597917A CN 201811208124 A CN201811208124 A CN 201811208124A CN 109597917 A CN109597917 A CN 109597917A
- Authority
- CN
- China
- Prior art keywords
- node
- document
- xsl
- xml schema
- attribute
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Landscapes
- Document Processing Apparatus (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种将XML Schema文档转换为XSL文档的方法,包括以下步骤:先确定XML Schema标准定义中需要关注的元素,然后确定XML Schema标准定义的元素和XSL标准定义的元素之间的映射关系;对XML Schema文档进行解析,获取schema标准中需要关注的第一个元素,并添加到XSL文档中;按照深度优先原则依次对XML Schema文档中的<schema>的子节点中的<element>元素进行解析,查找XML Schema中需要关注的元素并添加到XSL文档中,直到完成整个XML Schema文档的转换。本发明降低了XSL文档编辑的复杂度,并提高编辑的效率,并且使得XML文档易于阅读。
Description
技术领域
本发明涉及一种计算机文档转换方法,尤其涉及一种将XML Schema文档转换为XSL文档的方法。
背景技术
XML是一种数据描述和交换的通用格式,得到了广泛的应用,具有通用性和可交换性。XML Schema用来描述XML文档结构,对XML文档进行约束和验证,其本身也是使用XML文档结构,是基于XML的DTD替代者。XML schema定义了XML文档的如下参数:可出现在XML文档中的元素、属性;哪个元素是子元素;子元素出现的次序、子元素的数目;元素是否为空、是否可包含文本;元素和属性的数据类型;元素和属性的默认值以及固定值。
XSL(eXtensible Stylesheet Language)是可扩展样式表语言,是一种用于以可读格式呈现XML数据的语言。通俗的讲就是XML文件可以通过引用XSL样式表呈现不同格式,即XSL可以将XML文档转化为XHTML/HTML文档或者是其他XML文档。
目前,通常采用将XML schema文档手动编辑为XSL文档或者用商业软件将XMLschema文档自动生成XSL文档的方式实现将XML Schema文档转换为XSL文档的目的。但前者复杂度高,费时费力;后者通常需要大量的修改才能应用于XML中。并且这两种方式都存在一个严重的问题:一旦对XML文档进行了修改,都需要对XSL文档进行重新编辑。
发明内容
本发明的目的就在于为了解决上述问题而提供一种将XML Schema文档转换为XSL文档的方法。
本发明通过以下技术方案来实现上述目的:
一种将XML Schema文档转换为XSL文档的方法,其特征在于:包括以下步骤:
步骤1:先确定XML Schema标准定义中需要关注的元素,然后确定XMLSchema标准定义的元素和XSL标准定义的元素之间的映射关系;
步骤2:对XML Schema文档进行解析,获取schema标准中需要关注的第一个元素,并添加到XSL文档中;
步骤3:按照深度优先原则依次对XML Schema文档中的<schema>的子节点中的<element>元素进行解析,查找XML Schema中需要关注的元素并添加到XSL文档中,直到完成整个XML Schema文档的转换。
作为优选,所述步骤1具体包括以下步骤:
步骤(1.1):确定XML Schema标准定义中需要关注的元素包括但不限于以下元素:<xs:elment>元素及其name、type和ref属性;<xs:group>元素;<xs:attribute>元素及其ref属性;<xs:complexType>元素;
步骤(1.2):确定XML Schema标准定义的元素和XSL标准定义的元素之间的映射关系,具体为:<xs:elment>映射为<xsl:template>,并使用match属性关联XML元素和模板;/element/element之间的父子关系映射为template/apply-templates,并使用<apply-templates>的select属性,表示仅处理匹配该属性的值的子元素;<xs:attribute>映射为<xsl:value-of>,用于提取某个选定节点的值;/element/attribute映射为/template/value-of。
所述步骤2具体包括以下步骤:
步骤(2.1):创建XSL文档,并添加域名和版本信息;
步骤(2.2):读取XML Schema文档,获取document对象和根节点;
步骤(2.3):对根节点的子节点进行遍历,获取当前的子节点;
步骤(2.4):如果子节点的名称是element,那么解析节点的type、name和ref属性;
步骤(2.5):根据type、name和ref的值,确定需要关注的第一个元素的名称,并将该元素添加到XSL文档中。
所述步骤3具体包括以下步骤:
步骤(3.1):根据子节点的name、type、Ref属性值,确定新的要解析的element元素、element元素的路径Xpath、以及element元素节点名称;
步骤(3.2):获取该element元素节点迭代器;
步骤(3.3):根据element元素节点的名称参数,设置当前正在解析的element元素elementTemplate、以及正在解析的element元素节点的名称;
步骤(3.4):判断该element元素是否是叶子节点,如果是,则转到步骤(3.5);如果不是叶子节点,则转到步骤(3.8);
步骤(3.5):判断element元素节点的名称是否是element,如果是,则转到步骤(3.6);如果不是element,则转到步骤(3.7);
步骤(3.6):获取element元素节点的name、type属性值,并根据name和type的值是否为空,判断是否给elementTemplate元素添加子节点value-of;
步骤(3.7):对节点的ref属性值不为空的元素进行处理,确定新的要解析的element元素、element元素的路径Xpath、以及element元素节点名称;转到步骤(3.2);
步骤(3.8):对该元素的子节点进行遍历,获取元素节点element、元素节点名称、设置节点的Xpath,如果子节点名称是element,则转到步骤(3.9);如果子节点名称是attribute,则转到步骤(3.10);
步骤(3.9):对子节点名称为element的元素进行处理,根据子节点的name、type、ref属性值,确定新的要解析的element元素、element元素的路径Xpath、以及element元素节点名称;将当前的element元素添加到XSL文档中,节点的标签是<apply-templates>,父节点是elementTemplate;转到步骤(3.2);
步骤(3.10):对子节点名称为attributet的元素进行处理,并添加到XSL文档中,节点的标签是<value-of>,父节点是elementTemplate;转到步骤(3.2)。
本发明的有益效果在于:
本发明通过分析XML Schema文档和XSL文档之间的关系,确定XMLSchema文档中需要关注的元素并映射到XSL文档中,从而生成XSL文档的模板,用户只需要依据呈现的不同格式,在生成的XSL文档模板中添加一些html标签,就可以完成XSL文档的编辑,从而降低了XSL文档编辑的复杂度,并提高编辑的效率,并且生成的XSL文档支持基于该XML Schema生成的所有xml文档,通过引用该的XSL文档可以使XML文件呈现不同格式,使得XML文档易于阅读。
具体实施方式
下面结合实施例对本发明作进一步说明:
实施例:
一种将XML Schema文档转换为XSL文档的方法,包括以下步骤:
步骤1:先确定XML Schema标准定义中需要关注的元素,然后确定XMLSchema标准定义的元素和XSL标准定义的元素之间的映射关系;本步骤具体包括以下步骤:
步骤(1.1):确定XML Schema标准定义中需要关注的元素包括但不限于以下元素:<xs:elment>元素及其name、type和ref属性;<xs:group>元素;<xs:attribute>元素及其ref属性;<xs:complexType>元素;
步骤(1.2):确定XML Schema标准定义的元素和XSL标准定义的元素之间的映射关系,具体为:<xs:elment>映射为<xsl:template>,并使用match属性关联XML元素和模板;/element/element之间的父子关系映射为template/apply-templates,并使用<apply-templates>的select属性,表示仅处理匹配该属性的值的子元素;<xs:attribute>映射为<xsl:value-of>,用于提取某个选定节点的值;/element/attribute映射为/template/value-of;
步骤2:对XML Schema文档进行解析,获取schema标准中需要关注的第一个元素,并添加到XSL文档中;本步骤具体包括以下步骤:
步骤(2.1):创建XSL文档,并添加域名和版本信息;
步骤(2.2):读取XML Schema文档,获取document对象和根节点;
步骤(2.3):对根节点的子节点进行遍历,获取当前的子节点;
步骤(2.4):如果子节点的名称是element,那么解析节点的type、name和ref属性;
步骤(2.5):根据type、name和ref的值,确定需要关注的第一个元素的名称,并将该元素添加到XSL文档中;本步骤具体方法如下所示:
将关注的第一个元素dmodule作为<xsl:template>的子节点:
<xsl:template match="/">
<xsl:apply-templates select="dmodule"/>
</xsl:template>
match="/",用于定义整个文档;
步骤3:按照深度优先原则依次对XML Schema文档中的<schema>的子节点中的<element>元素进行解析,查找XML Schema中需要关注的元素并添加到XSL文档中,直到完成整个XML Schema文档的转换;本步骤具体包括以下步骤:
步骤(3.1):根据子节点的name、type、Ref属性值,确定新的要解析的element元素、element元素的路径Xpath、以及element元素节点名称;
步骤(3.2):获取该element元素节点迭代器;
步骤(3.3):根据element元素节点的名称参数,设置当前正在解析的element元素elementTemplate、以及正在解析的element元素节点的名称;
步骤(3.4):判断该element元素是否是叶子节点,如果是,则转到步骤(3.5);如果不是叶子节点,则转到步骤(3.8);
步骤(3.5):判断element元素节点的名称是否是element,如果是,则转到步骤(3.6);如果不是element,则转到步骤(3.7);
步骤(3.6):获取element元素节点的name、type属性值,并根据name和type的值是否为空,判断是否给elementTemplate元素添加子节点value-of;
步骤(3.7):对节点的ref属性值不为空的元素进行处理,确定新的要解析的element元素、element元素的路径Xpath、以及element元素节点名称;转到步骤(3.2);
步骤(3.8):对该元素的子节点进行遍历,获取元素节点element、元素节点名称、设置节点的Xpath,如果子节点名称是element,则转到步骤(3.9);如果子节点名称是attribute,则转到步骤(3.10);
步骤(3.9):对子节点名称为element的元素进行处理,根据子节点的name、type、ref属性值,确定新的要解析的element元素、element元素的路径Xpath、以及element元素节点名称;将当前的element元素添加到XSL文档中,节点的标签是<apply-templates>,父节点是elementTemplate;转到步骤(3.2);
步骤(3.10):对子节点名称为attributet的元素进行处理,并添加到XSL文档中,节点的标签是<value-of>,父节点是elementTemplate;转到步骤(3.2)。
更具体地,上述步骤1和步骤2采用dom4j解析xml的主要过程为:
SAXReader saxReader=new SAXReader();
Document doc=saxReader.read(xsd);//读取XML文件,获得document对象
Elementroot=doc.getRootElement();//获得根节点
Document xslDoc=DocumentHelper.createDocument();//创建XSL文档对象for(Iterator i=root.elementIterator();i.hasNext();){//获取根节点的所有子节点
Element element=(Element)i.next();//或得节点
……}//遍历节点
Element child=elementTemplate.addElement(xxx);//在节点elementTemplate下添加子节点
child.addAttribute(xxx);//为child添加属性
XMLWriterwriter=new XMLWriter(new FileWriter("xsl.xsl"),format);
writer.write(document);
writer.close();//将文档写入XML文件
XML Schema标准定义中需要关注的元素包括:<xs:elment>元素及其name、type和ref属性;<xs:group>元素;<xs:attribute>元素及其ref属性;<xs:complexType>元素等;
XML Schema标准定义的元素和XSL标准定义的元素之间的映射关系:
a)<xs:elment>映射为<xsl:template>;
b)/element/element之间的父子关映射为template/apply-templates;
c)<xs:attribute>映射为<xsl:value-of>;
d)/element/attribute映射为/template/value-of。
上述实施例只是本发明的较佳实施例,并不是对本发明技术方案的限制,只要是不经过创造性劳动即可在上述实施例的基础上实现的技术方案,均应视为落入本发明专利的权利保护范围内。
Claims (4)
1.一种将XML Schema文档转换为XSL文档的方法,其特征在于:包括以下步骤:
步骤1:先确定XML Schema标准定义中需要关注的元素,然后确定XML Schema标准定义的元素和XSL标准定义的元素之间的映射关系;
步骤2:对XML Schema文档进行解析,获取schema标准中需要关注的第一个元素,并添加到XSL文档中;
步骤3:按照深度优先原则依次对XML Schema文档中的<schema>的子节点中的<element>元素进行解析,查找XML Schema中需要关注的元素并添加到XSL文档中,直到完成整个XML Schema文档的转换。
2.根据权利要求1所述的将XML Schema文档转换为XSL文档的方法,其特征在于:所述步骤1具体包括以下步骤:
步骤(1.1):确定XML Schema标准定义中需要关注的元素包括但不限于以下元素:<xs:elment>元素及其name、type和ref属性;<xs:group>元素;<xs:attribute>元素及其ref属性;<xs:complexType>元素;
步骤(1.2):确定XML Schema标准定义的元素和XSL标准定义的元素之间的映射关系,具体为:<xs:elment>映射为<xsl:template>,并使用match属性关联XML元素和模板;/element/element之间的父子关系映射为template/apply-templates,并使用<apply-templates>的select属性,表示仅处理匹配该属性的值的子元素;<xs:attribute>映射为<xsl:value-of>,用于提取某个选定节点的值;/element/attribute映射为/template/value-of。
3.根据权利要求1所述的将XML Schema文档转换为XSL文档的方法,其特征在于:所述步骤2具体包括以下步骤:
步骤(2.1):创建XSL文档,并添加域名和版本信息;
步骤(2.2):读取XML Schema文档,获取document对象和根节点;
步骤(2.3):对根节点的子节点进行遍历,获取当前的子节点;
步骤(2.4):如果子节点的名称是element,那么解析节点的type、name和ref属性;
步骤(2.5):根据type、name和ref的值,确定需要关注的第一个元素的名称,并将该元素添加到XSL文档中。
4.根据权利要求1所述的将XML Schema文档转换为XSL文档的方法,其特征在于:所述步骤3具体包括以下步骤:
步骤(3.1):根据子节点的name、type、Ref属性值,确定新的要解析的element元素、element元素的路径Xpath、以及element元素节点名称;
步骤(3.2):获取该element元素节点迭代器;
步骤(3.3):根据element元素节点的名称参数,设置当前正在解析的element元素elementTemplate、以及正在解析的element元素节点的名称;
步骤(3.4):判断该element元素是否是叶子节点,如果是,则转到步骤(3.5);如果不是叶子节点,则转到步骤(3.8);
步骤(3.5):判断element元素节点的名称是否是element,如果是,则转到步骤(3.6);如果不是element,则转到步骤(3.7);
步骤(3.6):获取element元素节点的name、type属性值,并根据name和type的值是否为空,判断是否给elementTemplate元素添加子节点value-of;
步骤(3.7):对节点的ref属性值不为空的元素进行处理,确定新的要解析的element元素、element元素的路径Xpath、以及element元素节点名称;转到步骤(3.2);
步骤(3.8):对该元素的子节点进行遍历,获取元素节点element、元素节点名称、设置节点的Xpath,如果子节点名称是element,则转到步骤(3.9);如果子节点名称是attribute,则转到步骤(3.10);
步骤(3.9):对子节点名称为element的元素进行处理,根据子节点的name、type、ref属性值,确定新的要解析的element元素、element元素的路径Xpath、以及element元素节点名称;将当前的element元素添加到XSL文档中,节点的标签是<apply-templates>,父节点是elementTemplate;转到步骤(3.2);
步骤(3.10):对子节点名称为attributet的元素进行处理,并添加到XSL文档中,节点的标签是<value-of>,父节点是elementTemplate;转到步骤(3.2)。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811208124.3A CN109597917B (zh) | 2018-10-17 | 2018-10-17 | 将XML Schema文档转换为XSL文档的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811208124.3A CN109597917B (zh) | 2018-10-17 | 2018-10-17 | 将XML Schema文档转换为XSL文档的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109597917A true CN109597917A (zh) | 2019-04-09 |
CN109597917B CN109597917B (zh) | 2022-03-01 |
Family
ID=65957440
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811208124.3A Active CN109597917B (zh) | 2018-10-17 | 2018-10-17 | 将XML Schema文档转换为XSL文档的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109597917B (zh) |
Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1967580A (zh) * | 2006-04-04 | 2007-05-23 | 华为技术有限公司 | 电子帐单的实现方法 |
US7373600B2 (en) * | 2001-03-27 | 2008-05-13 | Koninklijke Philips Electronics N.V. | DICOM to XML generator |
CN101271475A (zh) * | 2008-04-02 | 2008-09-24 | 北京邮电大学 | 一种商业智能系统 |
CN101361063A (zh) * | 2006-04-12 | 2009-02-04 | 龙搜(北京)科技有限公司 | 支持基于规则的文档内容挖掘的系统与方法 |
CN101719162A (zh) * | 2009-11-27 | 2010-06-02 | 武汉大学 | 基于片段模式匹配的多版本开放式地理信息服务访问方法及系统 |
CN101739436A (zh) * | 2009-09-28 | 2010-06-16 | 孙彬 | 基于xml的柔性数据迁移方法 |
US20100174981A1 (en) * | 2004-08-24 | 2010-07-08 | Oracle International Corporation | Rtf template and xsl/fo conversion: a new way to create computer reports |
JP4786695B2 (ja) * | 2008-11-04 | 2011-10-05 | 富士通株式会社 | 構造化文書の構造変換装置 |
US20140297670A1 (en) * | 2013-04-01 | 2014-10-02 | Oracle International Corporation | Enhanced flexibility for users to transform xml data to a desired format |
US20150186339A1 (en) * | 2013-12-31 | 2015-07-02 | Altova Gmbh | Profile-based optimization of xslt transformations |
US20170169000A1 (en) * | 2007-06-29 | 2017-06-15 | Microsoft Technology Licensing, Llc | WYSIWYG, browser-based XML editor |
-
2018
- 2018-10-17 CN CN201811208124.3A patent/CN109597917B/zh active Active
Patent Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7373600B2 (en) * | 2001-03-27 | 2008-05-13 | Koninklijke Philips Electronics N.V. | DICOM to XML generator |
US20100174981A1 (en) * | 2004-08-24 | 2010-07-08 | Oracle International Corporation | Rtf template and xsl/fo conversion: a new way to create computer reports |
CN1967580A (zh) * | 2006-04-04 | 2007-05-23 | 华为技术有限公司 | 电子帐单的实现方法 |
CN101361063A (zh) * | 2006-04-12 | 2009-02-04 | 龙搜(北京)科技有限公司 | 支持基于规则的文档内容挖掘的系统与方法 |
US20170169000A1 (en) * | 2007-06-29 | 2017-06-15 | Microsoft Technology Licensing, Llc | WYSIWYG, browser-based XML editor |
CN101271475A (zh) * | 2008-04-02 | 2008-09-24 | 北京邮电大学 | 一种商业智能系统 |
JP4786695B2 (ja) * | 2008-11-04 | 2011-10-05 | 富士通株式会社 | 構造化文書の構造変換装置 |
CN101739436A (zh) * | 2009-09-28 | 2010-06-16 | 孙彬 | 基于xml的柔性数据迁移方法 |
CN101719162A (zh) * | 2009-11-27 | 2010-06-02 | 武汉大学 | 基于片段模式匹配的多版本开放式地理信息服务访问方法及系统 |
US20140297670A1 (en) * | 2013-04-01 | 2014-10-02 | Oracle International Corporation | Enhanced flexibility for users to transform xml data to a desired format |
US20150186339A1 (en) * | 2013-12-31 | 2015-07-02 | Altova Gmbh | Profile-based optimization of xslt transformations |
Non-Patent Citations (3)
Title |
---|
刘颖: ""交管系统数据交换平台的设计与实现"", 《上海电气技术》 * |
杨剑、唐慧佳、孙林夫、王胜银: ""基于XML的异构数据交换系统的研究与实现"", 《计算机工程》 * |
秦英、马永起、蒙立荣: ""一种基于XML的数据转换方法的设计与实现"", 《微型机与应用》 * |
Also Published As
Publication number | Publication date |
---|---|
CN109597917B (zh) | 2022-03-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7703007B2 (en) | Importing and exporting markup language data in a spreadsheet application document | |
US7337182B2 (en) | Management of markup language data mappings available to a spreadsheet application workbook | |
Mani et al. | Semantic data modeling using XML schemas | |
US8024368B2 (en) | Generating XML instances from flat files | |
US9239821B2 (en) | Translation file | |
US6990632B2 (en) | Method and system for inferring a schema from a hierarchical data structure for use in a spreadsheet | |
US20040221233A1 (en) | Systems and methods for report design and generation | |
CN102289407B (zh) | 文档格式转换自动测试方法 | |
US20090019072A1 (en) | Interoperable retrieval and deposit using annotated schema to interface between industrial document specification languages | |
WO2013135055A1 (zh) | 一种存储xml数据到关系数据库的方法 | |
JP2005502100A (ja) | Dicomxmldtd/スキーマ発生装置 | |
US20080114740A1 (en) | System and method for maintaining conformance of electronic document structure with multiple, variant document structure models | |
US8612489B2 (en) | LossLess transformation of XBRL instance to XML data model instance | |
US20120304051A1 (en) | Automation Tool for XML Based Pagination Process | |
JP2005515552A (ja) | Xmlにおけるdicom意味条件の特定 | |
US20040122795A1 (en) | Method, system, and program for optimizing processing of nested functions | |
CN101615174A (zh) | 基于xml的不同格式文档的转换方法 | |
CN109597917A (zh) | 将XML Schema文档转换为XSL文档的方法 | |
CN104317935B (zh) | 一种xml账单文件批量生成html页面的方法及系统 | |
US8719693B2 (en) | Method for storing localized XML document values | |
US20070083529A1 (en) | Managing cyclic constructs of XML schema in a rdbms | |
US11176221B2 (en) | Generating high volume accessible documents | |
US7487439B1 (en) | Method and apparatus for converting between data sets and XML documents | |
Cisco | Document Step Descriptions | |
Zhang et al. | Schemas extraction for XML documents by XML element sequence patterns |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |