使用XSL将DOCX表转换为xml

时间:2011-10-10 12:08:37

标签: xml xslt docx

我有一个带有工作计划表的docx文件,如下所示:

        monday | tuesday | wednesday | thursday | friday | saturday | sunday
Peter     5    |   4     |           |    6     |   5    |          |   11
John      2    |         |    1      |    6     |   5    |     4    |
etc..

我从docx中提取了document.xml,并尝试使用此xml创建以下xml。

<schedule>
   <monday>
     <shift name="Peter" time="5" />
     <shift name="John"  time="2" />
   </monday>
   <tuesday>
 etc...

我唯一不知道该怎么做的是将轮班添加到适当的日期。我设法得到的xml是:

<schedule>
   <monday>
     <shift name="Peter" time="5" />
   </monday>
   <monday>
     <shift name="John"  time="2" />
   </monday>
   <tuesday>
etc..

我该如何解决这个问题?

附着物: document.xml(从docx中提取)HERE 我创建的xsl HERE

1 个答案:

答案 0 :(得分:0)

适用于您当前的结果此转换(Muenchian分组)

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>
 <xsl:key name="kDayByName" match="/*/*" use="name()"/>

 <xsl:template match="node()|@*">
     <xsl:copy>
       <xsl:apply-templates select="node()|@*"/>
     </xsl:copy>
 </xsl:template>

 <xsl:template match="/*/*"/>

 <xsl:template match=
  "/*/*[generate-id()
       =
        generate-id(key('kDayByName', name())[1])
       ]
  ">

  <xsl:copy>
    <xsl:apply-templates select=
        "key('kDayByName', name())/node()"/>
  </xsl:copy>
 </xsl:template>
</xsl:stylesheet>

应用于此XML文档时

<schedule>
    <monday>
        <shift name="Peter" time="5" />
    </monday>
    <monday>
        <shift name="John"  time="2" />
    </monday>
</schedule>

产生了想要的正确结果

<schedule>
    <monday>
        <shift name="Peter" time="5" />
        <shift name="John" time="2" />
    </monday>
</schedule>