w:tab-Tag inside Open XML Table (XML->Open XML)
w:tab-Tag inside Open XML Table (XML->Open XML)
我正在尝试翻译 XML-File to Open XML (Word)。
并在 <table>
内翻译 <br/>
。
翻译示例如下:
<w:tbl>
<w:tblPr>
<w:tblW w:w="0" w:type="auto"/>
<w:tblInd w:w="2160" w:type="dxa"/>
<w:tblBorders>
<w:top w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/>
<w:left w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/>
<w:bottom w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/>
<w:right w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/>
<w:insideH w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/>
<w:insideV w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/>
</w:tblBorders>
<w:tblCellMar>
<w:top w:w="28" w:type="dxa"/>
<w:bottom w:w="28" w:type="dxa"/>
</w:tblCellMar>
<w:tblLook w:val="04A0"/>
</w:tblPr>
<w:tblGrid>
<w:gridCol w:w="3629"/>
<w:gridCol w:w="3352"/>
</w:tblGrid>
<w:tr wsp:rsidR="00FC1136" wsp:rsidRPr="0078376D">
<w:trPr>
<w:trHeight w:val="200"/>
</w:trPr>
<w:tc>
<w:tcPr>
<w:tcW w:w="4500" w:type="dxa"/>
</w:tcPr>
<w:p wsp:rsidR="00FC1136" wsp:rsidRPr="0078376D" wsp:rsidRDefault="00F35AB4">
<w:pPr>
<w:rPr>
<w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/>
<wx:font wx:val="Arial"/>
<w:lang w:val="EN-US"/>
</w:rPr>
</w:pPr>
<w:r wsp:rsidRPr="0078376D">
<w:rPr>
<w:lang w:val="EN-US"/>
</w:rPr>
<w:br/>
</w:r>
<w:r wsp:rsidRPr="0078376D">
<w:rPr>
<w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/>
<wx:font wx:val="Arial"/>
<w:sz w:val="20"/>
<w:sz-cs w:val="20"/>
<w:lang w:val="EN-US"/>
</w:rPr>
<w:tab/>
<w:t>shift enter</w:t>
</w:r>
</w:p>
</w:tc>
</w:tr>
</w:tbl>
我在下一行得到了一个额外的 <w:tab/>
,即使我没有将它插入 XSLT 的任何地方。
我怎样才能删除这个标签?
注意:额外的 w:tab-Tag 仅插入 table 内部和 w:br-Tag
之后
XSLT 的一部分(完整的代码有几百行,希望足够了):
<xsl:template match="br"><w:br/></xsl:template>
<xsl:template match="table">
<xsl:variable name="totCol">
<xsl:value-of select="count(tbody/tr[1]/td)"/>
</xsl:variable>
<xsl:variable name="totRow">
<xsl:value-of select="count(tbody/tr)"/>
</xsl:variable>
<xsl:variable name="height">
<xsl:if test="not(contains(@style, 'height'))">
<xsl:value-of select="600 div $totRow"/>
</xsl:if>
<xsl:if test="contains(@style, 'height')">
<xsl:value-of select="(substring-before(substring-after(@style,'height:'),'px')) * 12 div $totRow"/>
</xsl:if>
</xsl:variable>
<xsl:variable name="width">
<xsl:if test="not(contains(@style, 'width'))">
<xsl:value-of select="9250 div $totCol"/>
</xsl:if>
<xsl:if test="contains(@style, 'width')">
<xsl:value-of select="(substring-before(substring-after(@style,'width:'),'px')) * 18 div $totCol"/>
</xsl:if>
</xsl:variable>
<xsl:variable name="indent">
<xsl:value-of select="(count(ancestor::ul)+count(ancestor::ol)) * 720"/>
</xsl:variable>
<w:tbl>
<w:tblPr>
<w:tblW w:w="0" w:type="auto"/>
<w:tblInd w:w="{$indent}" w:type="dxa"/>
<w:tblBorders>
<w:top w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/>
<w:left w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/>
<w:bottom w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/>
<w:right w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/>
<w:insideH w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/>
<w:insideV w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/>
</w:tblBorders>
<w:tblCellMar>
<w:top w:w="28" w:type="dxa"/>
<w:bottom w:w="28" w:type="dxa"/>
</w:tblCellMar>
<w:tblLook w:val="04A0"/>
</w:tblPr>
<w:tblGrid>
<xsl:for-each select="(tbody/tr)">
<w:gridCol w:w="{$width}"/>
</xsl:for-each>
</w:tblGrid>
<xsl:for-each select="(tbody/tr)">
<w:tr>
<w:trPr>
<w:trHeight w:val="{$height}"/>
</w:trPr>
<xsl:for-each select="(td)">
<w:tc>
<w:tcPr>
<w:tcW w:w="{$width}" w:type="dxa"/>
</w:tcPr>
<xsl:if test="count(text())>0"><w:p><xsl:apply-templates select="text()" /></w:p></xsl:if>
<xsl:apply-templates select="table" />
</w:tc>
</xsl:for-each>
</w:tr>
</xsl:for-each>
</w:tbl>
<xsl:if test="count(following-sibling::p|ol|ul)=0"><w:p/></xsl:if>
</xsl:template>
<xsl:template match="text()[normalize-space()]">
<!-- When text() does not has any HTML-Tags -->
<xsl:if test="name(..) = 'field'">
<w:p>
<w:pPr>
<w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial" />
<wx:font wx:val="Arial" />
<w:sz w:val="20" />
<w:sz-cs w:val="20" />
</w:pPr>
<w:r>
<w:rPr>
<!--w:spacing w:before="300" w:after="60" /-->
<w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial" />
<wx:font wx:val="Arial" />
<w:sz w:val="20" />
<w:sz-cs w:val="20" />
</w:rPr>
<w:t>
<xsl:copy-of select="."/>
</w:t>
</w:r>
</w:p>
</xsl:if>
<xsl:if test="name(..) != 'field'">
<w:pPr>
<xsl:for-each select="ancestor-or-self::*">
<xsl:call-template name="ancestorStyle">
<xsl:with-param name="ancestorName">
<xsl:value-of select="name()"/>
</xsl:with-param>
</xsl:call-template>
</xsl:for-each>
<xsl:call-template name="hdl-styles">
<xsl:with-param name="sstyles">
<xsl:for-each select="ancestor-or-self::*/@style">
<xsl:value-of select="concat(.,';')"/>
</xsl:for-each>
</xsl:with-param>
</xsl:call-template>
</w:pPr>
<w:r>
<w:rPr>
<xsl:for-each select="ancestor-or-self::*">
<xsl:call-template name="ancestorStyle">
<xsl:with-param name="ancestorName">
<xsl:value-of select="name()"/>
</xsl:with-param>
</xsl:call-template>
</xsl:for-each>
<xsl:call-template name="hdl-styles">
<xsl:with-param name="sstyles">
<xsl:for-each select="ancestor-or-self::*/@style">
<xsl:value-of select="concat(.,';')"/>
</xsl:for-each>
</xsl:with-param>
</xsl:call-template>
</w:rPr>
<w:t>
<xsl:copy-of select="."/>
</w:t>
</w:r>
</xsl:if>
</xsl:template>
XML 来源:
<table border="1" cellpadding="1" cellspacing="1" style="width: 500px">
<tbody>
<tr>
<td>
<p>first line</p>
<p>line break</p>
<p>line break<br />
shift enter<br />
lvl3 table</p>
</td>
<td> </td>
</tr>
<tr>
<td> </td>
<td> </td>
</tr>
<tr>
<td> </td>
<td> </td>
</tr>
</tbody>
</table>
<p>line break<br />
shift enter<br />
lvl3 table</p>
在 <p>
中的标签 <br />
之后有一个制表符,在打开 XML 时自动转换为 <w:tab/>
。
我正在尝试翻译 XML-File to Open XML (Word)。
并在 <table>
内翻译 <br/>
。
翻译示例如下:
<w:tbl>
<w:tblPr>
<w:tblW w:w="0" w:type="auto"/>
<w:tblInd w:w="2160" w:type="dxa"/>
<w:tblBorders>
<w:top w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/>
<w:left w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/>
<w:bottom w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/>
<w:right w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/>
<w:insideH w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/>
<w:insideV w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/>
</w:tblBorders>
<w:tblCellMar>
<w:top w:w="28" w:type="dxa"/>
<w:bottom w:w="28" w:type="dxa"/>
</w:tblCellMar>
<w:tblLook w:val="04A0"/>
</w:tblPr>
<w:tblGrid>
<w:gridCol w:w="3629"/>
<w:gridCol w:w="3352"/>
</w:tblGrid>
<w:tr wsp:rsidR="00FC1136" wsp:rsidRPr="0078376D">
<w:trPr>
<w:trHeight w:val="200"/>
</w:trPr>
<w:tc>
<w:tcPr>
<w:tcW w:w="4500" w:type="dxa"/>
</w:tcPr>
<w:p wsp:rsidR="00FC1136" wsp:rsidRPr="0078376D" wsp:rsidRDefault="00F35AB4">
<w:pPr>
<w:rPr>
<w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/>
<wx:font wx:val="Arial"/>
<w:lang w:val="EN-US"/>
</w:rPr>
</w:pPr>
<w:r wsp:rsidRPr="0078376D">
<w:rPr>
<w:lang w:val="EN-US"/>
</w:rPr>
<w:br/>
</w:r>
<w:r wsp:rsidRPr="0078376D">
<w:rPr>
<w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/>
<wx:font wx:val="Arial"/>
<w:sz w:val="20"/>
<w:sz-cs w:val="20"/>
<w:lang w:val="EN-US"/>
</w:rPr>
<w:tab/>
<w:t>shift enter</w:t>
</w:r>
</w:p>
</w:tc>
</w:tr>
</w:tbl>
我在下一行得到了一个额外的 <w:tab/>
,即使我没有将它插入 XSLT 的任何地方。
我怎样才能删除这个标签?
注意:额外的 w:tab-Tag 仅插入 table 内部和 w:br-Tag
之后XSLT 的一部分(完整的代码有几百行,希望足够了):
<xsl:template match="br"><w:br/></xsl:template>
<xsl:template match="table">
<xsl:variable name="totCol">
<xsl:value-of select="count(tbody/tr[1]/td)"/>
</xsl:variable>
<xsl:variable name="totRow">
<xsl:value-of select="count(tbody/tr)"/>
</xsl:variable>
<xsl:variable name="height">
<xsl:if test="not(contains(@style, 'height'))">
<xsl:value-of select="600 div $totRow"/>
</xsl:if>
<xsl:if test="contains(@style, 'height')">
<xsl:value-of select="(substring-before(substring-after(@style,'height:'),'px')) * 12 div $totRow"/>
</xsl:if>
</xsl:variable>
<xsl:variable name="width">
<xsl:if test="not(contains(@style, 'width'))">
<xsl:value-of select="9250 div $totCol"/>
</xsl:if>
<xsl:if test="contains(@style, 'width')">
<xsl:value-of select="(substring-before(substring-after(@style,'width:'),'px')) * 18 div $totCol"/>
</xsl:if>
</xsl:variable>
<xsl:variable name="indent">
<xsl:value-of select="(count(ancestor::ul)+count(ancestor::ol)) * 720"/>
</xsl:variable>
<w:tbl>
<w:tblPr>
<w:tblW w:w="0" w:type="auto"/>
<w:tblInd w:w="{$indent}" w:type="dxa"/>
<w:tblBorders>
<w:top w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/>
<w:left w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/>
<w:bottom w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/>
<w:right w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/>
<w:insideH w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/>
<w:insideV w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/>
</w:tblBorders>
<w:tblCellMar>
<w:top w:w="28" w:type="dxa"/>
<w:bottom w:w="28" w:type="dxa"/>
</w:tblCellMar>
<w:tblLook w:val="04A0"/>
</w:tblPr>
<w:tblGrid>
<xsl:for-each select="(tbody/tr)">
<w:gridCol w:w="{$width}"/>
</xsl:for-each>
</w:tblGrid>
<xsl:for-each select="(tbody/tr)">
<w:tr>
<w:trPr>
<w:trHeight w:val="{$height}"/>
</w:trPr>
<xsl:for-each select="(td)">
<w:tc>
<w:tcPr>
<w:tcW w:w="{$width}" w:type="dxa"/>
</w:tcPr>
<xsl:if test="count(text())>0"><w:p><xsl:apply-templates select="text()" /></w:p></xsl:if>
<xsl:apply-templates select="table" />
</w:tc>
</xsl:for-each>
</w:tr>
</xsl:for-each>
</w:tbl>
<xsl:if test="count(following-sibling::p|ol|ul)=0"><w:p/></xsl:if>
</xsl:template>
<xsl:template match="text()[normalize-space()]">
<!-- When text() does not has any HTML-Tags -->
<xsl:if test="name(..) = 'field'">
<w:p>
<w:pPr>
<w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial" />
<wx:font wx:val="Arial" />
<w:sz w:val="20" />
<w:sz-cs w:val="20" />
</w:pPr>
<w:r>
<w:rPr>
<!--w:spacing w:before="300" w:after="60" /-->
<w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial" />
<wx:font wx:val="Arial" />
<w:sz w:val="20" />
<w:sz-cs w:val="20" />
</w:rPr>
<w:t>
<xsl:copy-of select="."/>
</w:t>
</w:r>
</w:p>
</xsl:if>
<xsl:if test="name(..) != 'field'">
<w:pPr>
<xsl:for-each select="ancestor-or-self::*">
<xsl:call-template name="ancestorStyle">
<xsl:with-param name="ancestorName">
<xsl:value-of select="name()"/>
</xsl:with-param>
</xsl:call-template>
</xsl:for-each>
<xsl:call-template name="hdl-styles">
<xsl:with-param name="sstyles">
<xsl:for-each select="ancestor-or-self::*/@style">
<xsl:value-of select="concat(.,';')"/>
</xsl:for-each>
</xsl:with-param>
</xsl:call-template>
</w:pPr>
<w:r>
<w:rPr>
<xsl:for-each select="ancestor-or-self::*">
<xsl:call-template name="ancestorStyle">
<xsl:with-param name="ancestorName">
<xsl:value-of select="name()"/>
</xsl:with-param>
</xsl:call-template>
</xsl:for-each>
<xsl:call-template name="hdl-styles">
<xsl:with-param name="sstyles">
<xsl:for-each select="ancestor-or-self::*/@style">
<xsl:value-of select="concat(.,';')"/>
</xsl:for-each>
</xsl:with-param>
</xsl:call-template>
</w:rPr>
<w:t>
<xsl:copy-of select="."/>
</w:t>
</w:r>
</xsl:if>
</xsl:template>
XML 来源:
<table border="1" cellpadding="1" cellspacing="1" style="width: 500px">
<tbody>
<tr>
<td>
<p>first line</p>
<p>line break</p>
<p>line break<br />
shift enter<br />
lvl3 table</p>
</td>
<td> </td>
</tr>
<tr>
<td> </td>
<td> </td>
</tr>
<tr>
<td> </td>
<td> </td>
</tr>
</tbody>
</table>
<p>line break<br />
shift enter<br />
lvl3 table</p>
在 <p>
中的标签 <br />
之后有一个制表符,在打开 XML 时自动转换为 <w:tab/>
。