2009-07-29 13 views
7

Estoy generando hoja de cálculo XLSX usando OOXML SDK, y necesito deshacerme del prefijo de espacio de nombres x:. ¿Cómo puedo conseguir esto?XLSX: cómo deshacerse del prefijo del espacio de nombres predeterminado 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(); }

En este caso, el archivo XLSX original, proviene de Excel 2007 y no tiene el prefijo, sin embargo, después de la operación de almacenamiento aparece el prefijo. ¿Cómo puedo evitar eso?

+1

¿Por qué necesita para deshacerse del prefijo? ¿Qué problema es causado por el prefijo? –

+0

Porque el cliente tiene algún software extraño que no puede importar el archivo con el prefijo, y no hay nada que ver con eso. Acabo de eliminar los prefijos manualmente, y se importó bien. – user116884

+0

¿Qué le parece aplicar un paso de postproceso a su documento XSLX que elimina el prefijo y establece el espacio de nombre predeterminado apropiado? Ver también http://stackoverflow.com/questions/413050/c-how-to-remove-namespace-information-from-xml-elements/413088#413088 –

Respuesta

0

A menos que esté muy equivocado, el archivo original también tiene el espacio de nombres, solo en forma de un espacio de nombres predeterminado. ¿Qué hay de malo con el espacio de nombres en primer lugar?

+0

Tienes razón. Eso es lo que quiero: el espacio de nombres predeterminado. Eso se debe a que mi cliente tiene un software extraño que no puede importar el XLSX con el prefijo, y no hay nada que ver con eso. Si elimino los prefijos manualmente, importa bien. – user116884

3

Aquí es una versión modificada de la hoja de estilos unidos por tiras de divo que sólo un único espacio de nombres y copia el resto textualmente:

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