在 Word 中用 space 字符替换制表符 Open XML (OOXML)
Replace tab character with space character in Word Open XML (OOXML)
我想插入一个 space 字符,其中 w:tab 字符位于使用 XSLT 的 Open XML 文档中。
这是我的风格sheet:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"
xmlns:v="urn:schemas-microsoft-com:vml"
exclude-result-prefixes="w v">
<xsl:output method="text" indent="no" encoding="UTF-8" version="1.0"/>
<!-- document root -->
<xsl:template match="/">
<!-- root element in document -->
<xsl:apply-templates select="w:document"/>
</xsl:template>
<!-- ****************************start document**************************** -->
<xsl:template match="w:document">
<xsl:for-each select="//w:p">
<xsl:apply-templates select="*/w:t"/>
<xsl:text>|¤¤</xsl:text>
</xsl:for-each>
</xsl:template>
<!-- get all text nodes within a para -->
<xsl:template match="*/w:t">
<xsl:value-of select="."/>
</xsl:template>
<!-- **************************** end document**************************** -->
这是我打开 XML 文档的片段:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<w:document xmlns:wpc="http://schemas.microsoft.com/office/word/2010/wordprocessingCanvas" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:wp14="http://schemas.microsoft.com/office/word/2010/wordprocessingDrawing" xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:w14="http://schemas.microsoft.com/office/word/2010/wordml" xmlns:wpg="http://schemas.microsoft.com/office/word/2010/wordprocessingGroup" xmlns:wpi="http://schemas.microsoft.com/office/word/2010/wordprocessingInk" xmlns:wne="http://schemas.microsoft.com/office/word/2006/wordml" xmlns:wps="http://schemas.microsoft.com/office/word/2010/wordprocessingShape" mc:Ignorable="w14 wp14">
<w:body>
<w:p w:rsidR="00AC02A3" w:rsidRDefault="00AC02A3">
<w:pPr>
<w:pStyle w:val="DefaultText"/>
<w:ind w:left="720" w:hanging="720"/>
</w:pPr>
<w:r>
<w:t>1.1</w:t>
</w:r>
<w:r>
<w:tab/>
</w:r>
<w:r>
<w:rPr>
<w:u w:val="single"/>
</w:rPr>
<w:t>C</w:t>
</w:r>
<w:r>
<w:rPr>
<w:color w:val="000000"/>
<w:u w:val="single"/>
</w:rPr>
<w:t>ompetitive People</w:t>
</w:r>
<w:r>
<w:rPr>
<w:color w:val="000000"/>
</w:rPr>
<w:t xml:space="preserve"> will always find a way to work out, even when pressed for time. It foll</w:t>
</w:r>
<w:r>
<w:rPr>
<w:color w:val="000000"/>
</w:rPr>
<w:t>d</w:t>
</w:r>
<w:r>
<w:rPr>
<w:color w:val="000000"/>
</w:rPr>
<w:t>ows that anyone can</w:t>
</w:r>
</w:p>
<w:p w:rsidR="00AC02A3" w:rsidRDefault="00AC02A3">
<w:pPr>
<w:pStyle w:val="DefaultText"/>
</w:pPr>
</w:p>
<w:p w:rsidR="00AC02A3" w:rsidRDefault="00AC02A3">
<w:pPr>
<w:pStyle w:val="DefaultText"/>
<w:ind w:left="720" w:hanging="720"/>
</w:pPr>
<w:r>
<w:t>1.2</w:t>
</w:r>
<w:r>
<w:tab/>
</w:r>
<w:r>
<w:rPr>
<w:u w:val="single"/>
</w:rPr>
<w:t>improve their time</w:t>
</w:r>
<w:r>
<w:t xml:space="preserve"> management if th</w:t>
</w:r>
<w:r>
<w:t>e</w:t>
</w:r>
<w:r>
<w:t>y really try ha</w:t>
</w:r>
<w:r>
<w:t>d</w:t>
</w:r>
<w:r>
<w:t xml:space="preserve">rd enough.</w:t>
</w:r>
</w:p>
</w:body>
这是它产生的输出:
1.1有竞争力的人总能找到锻炼的方法,即使时间紧迫。由此可见,任何人都可以 1.2 改善他们的时间管理。
我想在1.1和竞技之间插入一个space字符,1.2和改进。
我假设我将不得不操作以下片段,但我卡住了:
<w:r>
<w:t>1.1</w:t>
</w:r>
<w:r>
<w:tab/>
</w:r>
<w:r>
<w:rPr>
<w:u w:val="single"/>
</w:rPr>
<w:t>C</w:t>
</w:r>
OXML输出解决方案
要输出 OXML 但将 w:tab
替换为 w:t
中的 space 字符,请使用此 XSLT:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="w:tab">
<w:t>
<xsl:text> </xsl:text>
</w:t>
</xsl:template>
</xsl:stylesheet>
文本输出解决方案
要像这样输出文本,
1.1 Competitive People will always find a way to work out, even when pressed for time. It folldows that anyone can
1.2 improve their time management if they really try hadrd enough.
使用此 XSLT:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
<xsl:output method="text"/>
<xsl:strip-space elements="*"/>
<xsl:template match="w:t">
<xsl:value-of select="."/>
</xsl:template>
<xsl:template match="w:p[.//w:t]">
<xsl:apply-templates/>
<xsl:text>
</xsl:text>
</xsl:template>
<xsl:template match="w:tab">
<xsl:text> </xsl:text>
</xsl:template>
</xsl:stylesheet>
我想插入一个 space 字符,其中 w:tab 字符位于使用 XSLT 的 Open XML 文档中。
这是我的风格sheet:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"
xmlns:v="urn:schemas-microsoft-com:vml"
exclude-result-prefixes="w v">
<xsl:output method="text" indent="no" encoding="UTF-8" version="1.0"/>
<!-- document root -->
<xsl:template match="/">
<!-- root element in document -->
<xsl:apply-templates select="w:document"/>
</xsl:template>
<!-- ****************************start document**************************** -->
<xsl:template match="w:document">
<xsl:for-each select="//w:p">
<xsl:apply-templates select="*/w:t"/>
<xsl:text>|¤¤</xsl:text>
</xsl:for-each>
</xsl:template>
<!-- get all text nodes within a para -->
<xsl:template match="*/w:t">
<xsl:value-of select="."/>
</xsl:template>
<!-- **************************** end document**************************** -->
这是我打开 XML 文档的片段:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<w:document xmlns:wpc="http://schemas.microsoft.com/office/word/2010/wordprocessingCanvas" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:wp14="http://schemas.microsoft.com/office/word/2010/wordprocessingDrawing" xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:w14="http://schemas.microsoft.com/office/word/2010/wordml" xmlns:wpg="http://schemas.microsoft.com/office/word/2010/wordprocessingGroup" xmlns:wpi="http://schemas.microsoft.com/office/word/2010/wordprocessingInk" xmlns:wne="http://schemas.microsoft.com/office/word/2006/wordml" xmlns:wps="http://schemas.microsoft.com/office/word/2010/wordprocessingShape" mc:Ignorable="w14 wp14">
<w:body>
<w:p w:rsidR="00AC02A3" w:rsidRDefault="00AC02A3">
<w:pPr>
<w:pStyle w:val="DefaultText"/>
<w:ind w:left="720" w:hanging="720"/>
</w:pPr>
<w:r>
<w:t>1.1</w:t>
</w:r>
<w:r>
<w:tab/>
</w:r>
<w:r>
<w:rPr>
<w:u w:val="single"/>
</w:rPr>
<w:t>C</w:t>
</w:r>
<w:r>
<w:rPr>
<w:color w:val="000000"/>
<w:u w:val="single"/>
</w:rPr>
<w:t>ompetitive People</w:t>
</w:r>
<w:r>
<w:rPr>
<w:color w:val="000000"/>
</w:rPr>
<w:t xml:space="preserve"> will always find a way to work out, even when pressed for time. It foll</w:t>
</w:r>
<w:r>
<w:rPr>
<w:color w:val="000000"/>
</w:rPr>
<w:t>d</w:t>
</w:r>
<w:r>
<w:rPr>
<w:color w:val="000000"/>
</w:rPr>
<w:t>ows that anyone can</w:t>
</w:r>
</w:p>
<w:p w:rsidR="00AC02A3" w:rsidRDefault="00AC02A3">
<w:pPr>
<w:pStyle w:val="DefaultText"/>
</w:pPr>
</w:p>
<w:p w:rsidR="00AC02A3" w:rsidRDefault="00AC02A3">
<w:pPr>
<w:pStyle w:val="DefaultText"/>
<w:ind w:left="720" w:hanging="720"/>
</w:pPr>
<w:r>
<w:t>1.2</w:t>
</w:r>
<w:r>
<w:tab/>
</w:r>
<w:r>
<w:rPr>
<w:u w:val="single"/>
</w:rPr>
<w:t>improve their time</w:t>
</w:r>
<w:r>
<w:t xml:space="preserve"> management if th</w:t>
</w:r>
<w:r>
<w:t>e</w:t>
</w:r>
<w:r>
<w:t>y really try ha</w:t>
</w:r>
<w:r>
<w:t>d</w:t>
</w:r>
<w:r>
<w:t xml:space="preserve">rd enough.</w:t>
</w:r>
</w:p>
</w:body>
这是它产生的输出:
1.1有竞争力的人总能找到锻炼的方法,即使时间紧迫。由此可见,任何人都可以 1.2 改善他们的时间管理。
我想在1.1和竞技之间插入一个space字符,1.2和改进。
我假设我将不得不操作以下片段,但我卡住了:
<w:r>
<w:t>1.1</w:t>
</w:r>
<w:r>
<w:tab/>
</w:r>
<w:r>
<w:rPr>
<w:u w:val="single"/>
</w:rPr>
<w:t>C</w:t>
</w:r>
OXML输出解决方案
要输出 OXML 但将 w:tab
替换为 w:t
中的 space 字符,请使用此 XSLT:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="w:tab">
<w:t>
<xsl:text> </xsl:text>
</w:t>
</xsl:template>
</xsl:stylesheet>
文本输出解决方案
要像这样输出文本,
1.1 Competitive People will always find a way to work out, even when pressed for time. It folldows that anyone can
1.2 improve their time management if they really try hadrd enough.
使用此 XSLT:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
<xsl:output method="text"/>
<xsl:strip-space elements="*"/>
<xsl:template match="w:t">
<xsl:value-of select="."/>
</xsl:template>
<xsl:template match="w:p[.//w:t]">
<xsl:apply-templates/>
<xsl:text>
</xsl:text>
</xsl:template>
<xsl:template match="w:tab">
<xsl:text> </xsl:text>
</xsl:template>
</xsl:stylesheet>