发明内容
本发明提供一种XML文件转换Word文件的方法及装置,以自动完成XML文件转换Word文件,并有效的实现XML文件转换Word文件转换过程中的自动编号和交叉引用的自动转换,不需要人工操作。
本发明的一个方面是提供一种XML文件转换Word文件的方法,该方法包括:
加载初始XML文件生成二进制的排版文件,并加载过程中识别自动编号节点、交叉引用源节点和交叉引用目标节点,在所述排版文件中进行标记;
根据预定格式将完成标记的排版文件转换成半成品XML文件,并在所述半成品XML文件中将对应的交叉引用源节点和交叉引用目标节点相关联;
在所述半成品XML文件中将自动编号节点、交叉引用源节点和交叉引用目标节点替换为对应的域代码节点和书签节点;
将所述半成品XML文件分割打包,输出成品Word文件。
进一步的,所述加载过程中识别自动编号节点、交叉引用源节点和交叉引用目标节点,在所述排版文件中进行标记,具体包括:
根据预定规则判断所述初始XML文件中各节点是否为自动编号节点、交叉引用源节点或交叉引用目标节点,其中所述预定规则包括自动编号及交叉引用的类型、名称和位置信息;
若判断为自动编号节点,则对所述排版文件中该节点增加第一扩展属性,所述第一扩展属性记录有对应的自动编号的类型和名称;
若判断为交叉引用源节点或交叉引用目标节点,则对所述排版文件中该节点增加第二扩展属性,所述第二扩展属性记录有对应的交叉引用的类型、名称和ID。
进一步的,所述根据预定格式将完成标记的排版文件转换成半成品XML文件,并在所述半成品XML文件中将对应的交叉引用源节点和交叉引用目标节点相关联,具体包括:
所述预定格式采用XML Schema定义,且在XML Schema定义中增加自动编号节点、交叉引用源节点和交叉引用目标节点的定义;
采用所述预定格式将所述完成标记的排版文件转换成半成品XML文件;
根据交叉引用源节点和交叉引用目标节点的第二扩展属性,将具有相同ID的交叉引用源节点和交叉引用目标节点相关联。
进一步的,所述根据交叉引用源节点和交叉引用目标节点的第二扩展属性,将具有相同ID的交叉引用源节点和交叉引用目标节点相关联,具体包括:
获取所述排版文件中所有交叉引用目标节点的第二扩展属性,创建交叉引用目标节点集合;
依次遍历各交叉引用源节点,根据ID从所述交叉引用目标节点集合中查找具有相同ID的交叉引用目标节点,并进行关联。
进一步的,所述在所述半成品XML文件中将自动编号节点、交叉引用源节点和交叉引用目标节点替换为对应的域代码节点和书签节点后,还包括:
通过增加样式分隔符,将自动编号节点、交叉引用源节点和交叉引用目标节点与其所在段内其他内容分离。
本发明的另一个方面是提供一种XML文件转换Word文件的装置,该装置包括:
标记模块,用于加载初始XML文件生成二进制的排版文件,并加载过程中识别自动编号节点、交叉引用源节点和交叉引用目标节点,在所述排版文件中进行标记;
转换模块,用于根据预定格式将完成标记的排版文件转换成半成品XML文件,并在所述半成品XML文件中将对应的交叉引用源节点和交叉引用目标节点相关联;
处理模块,用于在所述半成品XML文件中将自动编号节点、交叉引用源节点和交叉引用目标节点替换为对应的域代码节点和书签节点;
输出模块,用于将所述半成品XML文件分割打包,输出成品Word文件。
进一步的,所述标记模块具体用于:
根据预定规则判断所述初始XML文件中各节点是否为自动编号节点、交叉引用源节点或交叉引用目标节点,其中所述预定规则包括自动编号及交叉引用的类型、名称和位置信息;
若判断为自动编号节点,则对所述排版文件中该节点增加第一扩展属性,所述第一扩展属性记录有对应的自动编号的类型和名称;
若判断为交叉引用源节点或交叉引用目标节点,则对所述排版文件中该节点增加第二扩展属性,所述第二扩展属性记录有对应的交叉引用的类型、名称和ID。
进一步的,所述转换模块具体用于:
所述预定格式采用XML Schema定义,且在XML Schema定义中增加自动编号节点、交叉引用源节点和交叉引用目标节点的定义;
采用所述预定格式将所述完成标记的排版文件转换成半成品XML文件;
根据交叉引用源节点和交叉引用目标节点的第二扩展属性,将具有相同ID的交叉引用源节点和交叉引用目标节点相关联。
进一步的,所述转换模块还包括:
交叉引用目标节点管理子模块,用于获取所述排版文件中所有交叉引用目标节点的第二扩展属性,创建交叉引用目标节点集合;
关联子模块,用于依次遍历各交叉引用源节点,根据ID从所述交叉引用目标节点集合中查找具有相同ID的交叉引用目标节点,并进行关联。
进一步的,所述处理模块还用于:
通过增加样式分隔符,将自动编号节点、交叉引用源节点和交叉引用目标节点与其所在段内其他内容分离。
本发明提供的XML文件转换Word文件的方法及装置,通过加载初始XML文件生成二进制的排版文件,并加载过程中识别自动编号节点、交叉引用源节点和交叉引用目标节点,在排版文件中进行标记;根据预定格式将完成标记的排版文件转换成半成品XML文件,并在半成品XML文件中将对应的交叉引用源节点和交叉引用目标节点相关联;在半成品XML文件中将自动编号节点、交叉引用源节点和交叉引用目标节点替换为对应的域代码节点和书签节点;将半成品XML文件分割打包,输出成品Word文件,实现了自动化处理,不需要人工操作即可实现XML文件转换Word文件转换过程中的自动编号以及交叉引用的转换,并且具有较高的准确度,减少了人工修改Word文件的工作量,降低了人工修改时出错的可能性;此外通过在加载初始XML文件过程中识别自动编号节点、交叉引用源节点和交叉引用目标节点,避免了多余数据的干扰,具有较高的处理速度,同时增加了输出的成品Word文件的结构性,也减少了成品Word文件中的冗余数据。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
以下,对本申请中的部分用语进行解释说明,以便本领域技术人员理解。
自动编号节点:在文档使用过程中可依序自动添加或变更编号的节点,且具有相同的格式,例如对于fig(图)类型的内容,在文档中希望例如“图-1”、“图-2”、“图-3”……的次序依次编号,且格式保持一致,并且如果在“图-2”和“图-3”之间再插入一幅图时,新插入的图题自动变更为“图-3”,而原“图-3”变更为“图-4”。对于table(表)、disp-formula(公式)、bibr(参考文献)等其他类型亦然。自动编号节点至少应该具有类型和ID两个属性。
交叉引用源节点:交叉引用指对文档中其他位置的内容的应用,例如可以是对编号、题注、书签等的引用。其中交叉引用目标节点定义为被交叉引用源节点指向的自动编号节点。其中交叉引用源节点至少应该具有类型(ref-type)和ID(rid)两个属性,ref-type表示了交叉引用源节点指向的交叉引用目标节点的类型,本申请中ref-type支持取值有fig、table、disp-formula和bibr;rid表示了交叉引用源节点指向的交叉引用目标节点的ID。
交叉引用目标节点:交叉引用目标节点至少应该具有ID属性(id),其id值在整个XML文件中是唯一的。XML文件中的交叉引用关系通过两节点的属性rid和id确定,具有交叉引用关系的交叉引用源节点和交叉引用目标节点rid属性值和id属性值相同。交叉引用源节点和交叉引用目标节点是多对一的关系,即多个交叉引用源节点指向一个交叉引用目标节点。对于交叉引用目标节点的类型可由节点的结构确定,例如对于图的交叉引用目标节点的结构为:
<fig>
<label>1<label>
</fig>
而对于表的交叉引用目标节点的结构为:
<table>
<label>1<label>
</table>
通过区分交叉引用目标节点的结构则可区分交叉引用目标节点的类型。
图1为本发明实施例提供的XML文件转换Word文件的方法流程图。本实施例提供了一种XML文件转换Word文件的方法,该方法的具体步骤如下:
S101、加载初始XML文件生成二进制的排版文件,并加载过程中识别自动编号节点、交叉引用源节点和交叉引用目标节点,在所述排版文件中进行标记。
在本实施例中,将初始XML文件加载到内存中,生成二进制的排版文件,在加载过程中识别初始XML文件中的自动编号节点、交叉引用源节点和交叉引用目标节点,具体的,可以预先设定识别规则,根据识别规则识别初始XML文件中的自动编号节点、交叉引用源节点和交叉引用目标节点。在识别出自动编号节点、交叉引用源节点和交叉引用目标节点后,在排版文件中进行标记,本实施例中为节点增加一个扩展属性,在扩展属性中进行标记,其中标记的内容可以包括节点的类型、名称、位置信息等。当然本实施例中也可采用其他的识别和标记方式,此处不再赘述。
S102、根据预定格式将完成标记的排版文件转换成半成品XML文件,并在所述半成品XML文件中将对应的交叉引用源节点和交叉引用目标节点相关联。
在本实施例中,按照预定格式将完成标记的排版文件转换成半成品XML文件,也即将二进制的排版文件转换为XML文件,调整内容顺序,并进行渲染操作,同时完成对应的交叉引用源节点和交叉引用目标节点的关联。其中预定格式可采用XML Schema定义,且在XMLSchema定义中增加自动编号节点、交叉引用源节点和交叉引用目标节点的定义。此外,将对应的交叉引用源节点和交叉引用目标节点相关联具体可通过节点的ID或位置信息进行关联,以便将交叉引用源节点指向对应的交叉引用目标节点。
S103、在所述半成品XML文件中将自动编号节点、交叉引用源节点和交叉引用目标节点替换为对应的域代码节点和书签节点。
在本实施例中,通过将半成品XML文件中将自动编号节点、交叉引用源节点和交叉引用目标节点替换为对应的域代码节点和书签节点实现输出Word文件的结构性,也即Word文件中的图、表、公式和参考文献实现自动编号和自动交叉引用,即使插入新的节点,也会自动更新编号和自动交叉引用关系。
更具体的,本实施例中首先删除半成品XML文件中的自动编号、交叉引用源和交叉引用目标的纯文本表示,保存删除的文本,例如对于半成品XML文件中的纯文本表示“图1”,仅仅是文本而没有建立关系,如果后续直接添加域代码节点,而不删除纯文本表示的“图1”,此时Word文件中将会出现两个“图1”,其中一个为纯文本的“图1”,另一个为建立联系后的“图1”,导致内容的重复。在删除纯文本表示后,根据自动编号、交叉引用源和交叉引用目标的类型生成Word域代码,并添加域代码节点,具体的,其中交叉引用用到了Word中的REF域代码。例如,交叉引用源节点对应的域代码为“REF_Ref488674193”,交叉引用目标节点域代码为“REF_Ref488674193\h”,其中“_Ref488674193”为书签ID,也即Word中的交叉引用关系通过书签节点的ID决定。而对于自动编号采用SEQ域代码,例如“SEQ图\*ARABIC”。此外还可以对删除纯文本表示的文本识别自动出自动编号、交叉引用源和交叉引用目标前缀和后缀,添加前缀后缀节点,具体的,由于域代码会生成数字编号(1、2、3),而域代码中还有文本内容前缀、后缀,例如“图-1”前缀为图和-,后缀为空格,而在删除纯文本表示时会同时保存节点和前缀后缀的对应关系,因此通过添加前缀后缀节点,从而使得域代码的完整,保持与原文本内容一致。
S104、将所述半成品XML文件分割打包,输出成品Word文件。
在本实施例中,若将XML文件转换为Office2007以上版本的Word文件,可以先用xslt语言(Extensible Stylesheet Language Transformations,扩展样式表转换语言)将半成品xml文件转换为OOXML(Office Open XML),再分割打包OOXML,输出成品Word文件。更具体的,由于所有的数据都放在一个OOXML文件中,而Office2007以上版本的Word文件(docx)实际上是一个zip压缩包,因此本实施例中按照微软提供的Word压缩包的结构将OOXML文件分拆成多个XML,并按照docx目录结构存放,然后打包为docx文件,也即完成成品Word文件的输出。
本实施例提供的XML文件转换Word文件的方法,通过加载初始XML文件生成二进制的排版文件,并加载过程中识别自动编号节点、交叉引用源节点和交叉引用目标节点,在排版文件中进行标记;根据预定格式将完成标记的排版文件转换成半成品XML文件,并在半成品XML文件中将对应的交叉引用源节点和交叉引用目标节点相关联;在半成品XML文件中将自动编号节点、交叉引用源节点和交叉引用目标节点替换为对应的域代码节点和书签节点;将半成品XML文件分割打包,输出成品Word文件,实现了自动化处理,不需要人工操作即可实现XML文件转换Word文件转换过程中的自动编号以及交叉引用的转换,并且具有较高的准确度,减少了人工修改Word文件的工作量,降低了人工修改时出错的可能性;此外通过在加载初始XML文件过程中识别自动编号节点、交叉引用源节点和交叉引用目标节点,避免了多余数据的干扰,具有较高的处理速度,同时增加了输出的成品Word文件的结构性,也减少了成品Word文件中的冗余数据。
在上述实施例的基础上,如图2所示,S101所述的加载过程中识别自动编号节点、交叉引用源节点和交叉引用目标节点,在所述排版文件中进行标记,具体可包括:
S1011、根据预定规则判断所述初始XML文件中各节点是否为自动编号节点、交叉引用源节点或交叉引用目标节点,其中所述预定规则包括自动编号及交叉引用的类型、名称和位置信息。
本实施例中通过预先设定识别规则,根据识别规则识别初始XML文件中的自动编号节点、交叉引用源节点和交叉引用目标节点。本实施例中可以增加第一XML配置文件和第二XML配置文件,其中第一XML配置文件记录自动编号类型、自动编号名称和自动编号节点的位置信息,例如XPath路径,第二XML配置文件记录交叉引用名称、交叉引用类型、交叉引用源节点和交叉引用目标节点的位置信息,例如XPath路径。第一XML配置文件和第二XML配置文件可以由规则管理器读取和管理,当然规则管理器可以仅为一个,也可对于自动编号和交叉引用分别设置一个。而识别过程则由内容处理器执行,内容处理器通过规则管理器读取XML配置文件,获得预定规则,根据预定规则识别出自动编号节点、交叉引用源节点和交叉引用目标节点,当然内容处理器也可仅为一个,或者对于自动编号和交叉引用分别设置一个。
S1012、若判断为自动编号节点,则对所述排版文件中该节点增加第一扩展属性,所述第一扩展属性记录有对应的自动编号的类型和名称。
本实施例中当识别出节点为自动编号节点,则在排版文件中对该节点增加一个扩展属性,也即第一扩展属性,在第一扩展属性中记录该自动编号节点对应的自动编号类型和名称。
S1013、若判断为交叉引用源节点或交叉引用目标节点,则对所述排版文件中该节点增加第二扩展属性,所述第二扩展属性记录有对应的交叉引用的类型、名称和ID。
本实施例中当识别出节点为交叉引用源节点或交叉引用目标节点,则在排版文件中对该节点增加一个扩展属性,也即第二扩展属性,在第二扩展属性中记录该节点的类型、名称和ID,其中ID用于关联相对应的交叉引用源节点和交叉引用目标节点。
更进一步的,如图3所示,上述实施例中S102所述的根据预定格式将完成标记的排版文件转换成半成品XML文件,并在所述半成品XML文件中将对应的交叉引用源节点和交叉引用目标节点相关联,具体可包括:
S1021、所述预定格式采用XML Schema定义,且在XML Schema定义中增加自动编号节点、交叉引用源节点和交叉引用目标节点的定义。
在本实施例中,通过XML Schema定义预定格式,由于现有的XML Schema并没有对自动编号和交叉引用的定义,因此本实施例在XML Schema定义中增加对自动编号节点、交叉引用源节点和交叉引用目标节点的定义,以在排版文件转换成半成品XML文件时规定自动编号节点、交叉引用源节点和交叉引用目标节点的格式。
S1022、采用所述预定格式将所述完成标记的排版文件转换成半成品XML文件。
在本实施例中,将XML Schema定义的预定格式作为模板,按照此模板生成半成品XML文件,调整内容顺序,并进行渲染操作。
S1023、根据交叉引用源节点和交叉引用目标节点的第二扩展属性,将具有相同ID的交叉引用源节点和交叉引用目标节点相关联。
在本实施例中,在半成品XML文件中通过ID将交叉引用源节点和交叉引用目标节点相关联,从而为后续添加域代码提供基础。需要说明的是,可以由一个交叉引用源节点指向一个交叉引用目标节点,也可以由多个交叉引用源节点指向一个交叉引用目标节点。
更进一步的,S1023所述的根据交叉引用源节点和交叉引用目标节点的第二扩展属性,将具有相同ID的交叉引用源节点和交叉引用目标节点相关联,具体可包括:
1)获取所述排版文件中所有交叉引用目标节点的第二扩展属性,创建交叉引用目标节点集合;
2)依次遍历各交叉引用源节点,根据ID从所述交叉引用目标节点集合中查找具有相同ID的交叉引用目标节点,并进行关联。
本实施例中,为了避免每次通过交叉引用源节点查找交叉引用目标节点时都要搜索整个排版文件,因此创建了一个交叉引用目标节点集合,用于管理排版文件中所有交叉引用目标节点,并记载了所有交叉引用目标节点的第二扩展属性,从而提高由排版文件到半成品XML文件的转换速度。当然本实施例中也可另设一个交叉引用目标节点管理器,对于排版文件中所有交叉引用目标节点进行管理。
进一步的,S103所述的在所述半成品XML文件中将自动编号节点、交叉引用源节点和交叉引用目标节点替换为对应的域代码节点和书签节点后,还可包括:
通过增加样式分隔符,将自动编号节点、交叉引用源节点和交叉引用目标节点与其所在段内其他内容分离。
通常情况下,Word文件中一段中只能有一种段落样式,例如通常标号位于段落前,而本实施例增加样式分隔符后,将自动编号节点、交叉引用源节点和交叉引用目标节点与其所在段内其他内容分离,此时则可实现一段中有不同的段落样式,例如若未增加样式分割符,样式为“公式”,只能与该段的段落样式相同,而增加样式分割符后,则可实现如“公式(1)”在“公式”后自动编号的功能。
图4为本发明实施例提供的XML文件转换Word文件的装置的结构图。本实施例提供一种XML文件转换Word文件的装置,可以执行上述XML文件转换Word文件的方法实施例提供的处理流程,如图4所示,本实施例提供的XML文件转换Word文件的装置包括:标记模块201、转换模块202、处理模块203及输出模块204。
标记模块201,用于加载初始XML文件生成二进制的排版文件,并加载过程中识别自动编号节点、交叉引用源节点和交叉引用目标节点,在所述排版文件中进行标记;
转换模块202,用于根据预定格式将完成标记的排版文件转换成半成品XML文件,并在所述半成品XML文件中将对应的交叉引用源节点和交叉引用目标节点相关联;
处理模块203,用于在所述半成品XML文件中将自动编号节点、交叉引用源节点和交叉引用目标节点替换为对应的域代码节点和书签节点;
输出模块204,用于将所述半成品XML文件分割打包,输出成品Word文件。
进一步的,所述标记模块201具体用于:
根据预定规则判断所述初始XML文件中各节点是否为自动编号节点、交叉引用源节点或交叉引用目标节点,其中所述预定规则包括自动编号及交叉引用的类型、名称和位置信息;
若判断为自动编号节点,则对所述排版文件中该节点增加第一扩展属性,所述第一扩展属性记录有对应的自动编号的类型和名称;
若判断为交叉引用源节点或交叉引用目标节点,则对所述排版文件中该节点增加第二扩展属性,所述第二扩展属性记录有对应的交叉引用的类型、名称和ID。
进一步的,所述转换模块202具体用于:
所述预定格式采用XML Schema定义,且在XML Schema定义中增加自动编号节点、交叉引用源节点和交叉引用目标节点的定义;
采用所述预定格式将所述完成标记的排版文件转换成半成品XML文件;
根据交叉引用源节点和交叉引用目标节点的第二扩展属性,将具有相同ID的交叉引用源节点和交叉引用目标节点相关联。
进一步的,所述转换模块202还包括:
交叉引用目标节点管理子模块,用于获取所述排版文件中所有交叉引用目标节点的第二扩展属性,创建交叉引用目标节点集合;
关联子模块,用于依次遍历各交叉引用源节点,根据ID从所述交叉引用目标节点集合中查找具有相同ID的交叉引用目标节点,并进行关联。
进一步的,所述处理模块203还用于:
通过增加样式分隔符,将自动编号节点、交叉引用源节点和交叉引用目标节点与其所在段内其他内容分离。
本发明实施例提供的XML文件转换Word文件的装置可以具体用于执行上述图1-3所提供的方法实施例,具体功能此处不再赘述。
本实施例提供的XML文件转换Word文件的装置,通过加载初始XML文件生成二进制的排版文件,并加载过程中识别自动编号节点、交叉引用源节点和交叉引用目标节点,在排版文件中进行标记;根据预定格式将完成标记的排版文件转换成半成品XML文件,并在半成品XML文件中将对应的交叉引用源节点和交叉引用目标节点相关联;在半成品XML文件中将自动编号节点、交叉引用源节点和交叉引用目标节点替换为对应的域代码节点和书签节点;将半成品XML文件分割打包,输出成品Word文件,实现了自动化处理,不需要人工操作即可实现XML文件转换Word文件转换过程中的自动编号以及交叉引用的转换,并且具有较高的准确度,减少了人工修改Word文件的工作量,降低了人工修改时出错的可能性;此外通过在加载初始XML文件过程中识别自动编号节点、交叉引用源节点和交叉引用目标节点,避免了多余数据的干扰,具有较高的处理速度,同时增加了输出的成品Word文件的结构性,也减少了成品Word文件中的冗余数据。
在本发明所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
上述以软件功能单元的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能单元存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本发明各个实施例所述方法的部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
本领域技术人员可以清楚地了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。上述描述的装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。