使用xslt为excel单元格设置样式

时间:2012-11-20 12:51:30

标签: xml excel xslt

我有一个xml

<?xml version="1.0"?>
    <ArrayOfSubscriber xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <Subscriber>
        <FirstName xsi:nil="true" xmlns="somenamespace" />
        <LastName xsi:nil="true" xmlns="somenamespace" />
        ...
      </Subscriber>
...
</ArrayOfSubscriber>

我需要创建一个excel文件,其中每列都有自己的样式。我希望通过下一次转换得到我的预期

<Worksheet>
  <Table>
    <xsl:apply-templates select="//Subscriber" />
  </Table>
</Worksheet>

<xsl:template match="Subscriber">
  <Row ss:Height="15">
    <Cell ss:StyleID="s21">
      <Data ss:Type="String">
        <xsl:value-of select="FirstName" />
      </Data>
    </Cell>
    <Cell ss:StyleID="s22">
      <Data ss:Type="String">
        <xsl:value-of select="LastName " />
      </Data>
    </Cell>
    ...
   </Row>
</xsl:template>

但问题出现是因为名称空间xmlns="somenamespace"。因此我无法获得数据。我找到了一些主题,其中描述了删除它们的可能性,但就我对xslt的新手而言,我没有成功地将正确的模板应用于我的任务。

1 个答案:

答案 0 :(得分:1)

使用与此类似的构造在先前链接的帖子中尝试替代方法:

<xsl:value-of select="*[local-name()='FirstName' = and namespace-uri()='somenamespace']" />

以前建议将命名空间定义为父元素:

<parent xmlns:sn="somenamespace">
...
<xsl:template match="Subscriber">
  <Row ss:Height="15">
    <Cell ss:StyleID="s21">
      <Data ss:Type="String">
        <xsl:value-of select="sn:FirstName" />
      </Data>
    </Cell>
    <Cell ss:StyleID="s22">
      <Data ss:Type="String">
        <xsl:value-of select="sn:LastName " />
      </Data>
    </Cell>
    ...
   </Row>
</xsl:template>
...
</parent>
相关问题