【问题标题】:XLSX- how to get rid of the default namespace prefix x:?XLSX-如何摆脱默认的命名空间前缀 x:?
【发布时间】:2009-07-29 09:30:56
【问题描述】:

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

使用 (SpreadsheetDocument doc = SpreadsheetDocument.Open("template.xlsx", true)) { //保存共享字符串表部分 if (doc.WorkbookPart.GetPartsOfType().Count() > 0) { SharedStringTablePart shareStringPart =
doc.WorkbookPart.GetPartsOfType().First(); shareStringPart.SharedStringTable.Save(); } //保存工作簿 doc.WorkbookPart.Workbook.Save(); }

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

【问题讨论】:

  • 为什么要去掉前缀?前缀是什么问题?
  • 因为客户端有一些奇怪的软件无法导入带有前缀的文件 - 与此无关。我只是手动删除了前缀,并且导入正常。
  • 如何对您的 XSLX 文档应用一个删除前缀并设置适当的默认命名空间的后处理步骤?另见stackoverflow.com/questions/413050/…
  • 这很好,只是我只需要“清洗”一个特定的命名空间,而让所有其他命名空间保持不变。我怎样才能做到这一点?
  • 我实际上有同样的问题,但使用 Excel 2010。如果存在 x: 前缀,Excel 将忽略添加到文件中的 XmlMaps。手动删除前缀,它可以工作......

标签: namespaces openxml-sdk openxml spreadsheetml


【解决方案1】:

这是一个由 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>

【讨论】:

    【解决方案2】:

    除非我大错特错,否则原始文件也是命名空间的——仅以默认命名空间的形式。首先命名空间有什么问题?

    【讨论】:

    • 你是对的。这就是我想要的 - 默认命名空间。那是因为我的客户有一些奇怪的软件无法导入带有前缀的 XLSX - 这与此无关。如果我手动删除前缀,它可以导入。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-17
    • 2013-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多