使用XSL将DOCX表转换为xml



我有一个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中提取)在这里我在这里创建的xsl

将此转换(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>

:

<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>

相关内容

  • 没有找到相关文章

最新更新