2009-07-29 150 views
7

我使用OOXML SDK生成XLSX電子表格,並且我需要擺脫x:命名空間前綴。我怎樣才能做到這一點?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,但沒有前綴,但是在保存操作後出現前綴。我怎樣才能避免這種情況?

+1

爲什麼你需要擺脫的前綴?什麼問題是由前綴造成的? – 2009-07-29 09:36:08

+0

因爲客戶端有一些奇怪的軟件無法導入帶有前綴的文件 - 並且與此無關。我只是手動刪除前綴,並且它已導入正常。 – user116884 2009-07-29 09:42:12

回答

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> 
相關問題