XLSX-如何摆脱默认的名称空间前缀x:?

时间:2009-07-29 09:30:56

标签: namespaces openxml-sdk openxml spreadsheetml

我正在使用OOXML SDK生成XLSX电子表格,我需要摆脱x:命名空间前缀。我怎样才能做到这一点?

using (SpreadsheetDocument doc = SpreadsheetDocument.Open("template.xlsx", true))
            {
                //Save the shared string table part
                if (doc.WorkbookPart.GetPartsOfType().Count() > 0)
                {
                    SharedStringTablePart shareStringPart = 
doc.WorkbookPart.GetPartsOfType().First(); shareStringPart.SharedStringTable.Save(); } //Save the workbook doc.WorkbookPart.Workbook.Save(); }

此处,原始XLSX文件来自Excel 2007并且没有前缀,但是,在保存操作之后会出现前缀。我怎么能避免这种情况?

2 个答案:

答案 0 :(得分:3)

这是由divo链接的样式表的修改版本,它只删除一个名称空间并逐字复制其余的名称:

<xsl:stylesheet version="1.0" xmlns:x="namespace-to-strip" 
       xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="no" encoding="UTF-8"/>

  <xsl:template match="/|comment()|processing-instruction()">
    <xsl:copy>
      <xsl:apply-templates/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="x:*">
    <xsl:element name="{local-name()}">
      <xsl:apply-templates select="@*|node()"/>
    </xsl:element>
  </xsl:template>

  <xsl:template match="@x:*">
    <xsl:attribute name="{local-name()}">
      <xsl:value-of select="."/>
    </xsl:attribute>
  </xsl:template>

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

</xsl:stylesheet>

答案 1 :(得分:0)

除非我错了,原始文件也是命名空间 - 只能以默认命名空间的形式出现。首先是命名空间有什么问题?