我正在使用已转换为XML的OCR文档。这意味着页面上的文字在文档中排列很奇怪(路径方面)。
在XML文档中,单词的布局如/document/...../ln/wd
我希望我的XSLT文档要做的是在他们自己的输出行上打印每行中的单词(即检测XML文档中的单词并“保留”他们的格式)。
到目前为止我所拥有的只是打印文档中的每个wd,无论格式/位置如何。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ss="http://www.scansoft.com/omnipage/xml/ssdoc-schema3.xsd">
<xsl:template match="/">
<html>
<body>
<xsl:value-of select="/document::descendant::wd"/>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
感谢您的帮助
答案 0 :(得分:2)
从your previous question开始,您使用的格式为(简化)
<document xmlns="http://www.scansoft.com/omnipage/xml/ssdoc-schema3.xsd">
<!-- other intervening elements -->
<ln>
<wd>First</wd>
<space/>
<wd>line</wd>
</ln>
<ln>
<wd>Second</wd>
<space/>
<wd>line</wd>
</ln>
<ln>
<run>
<wd>Word</wd>
<tab />
</run>
<run>
<wd>another</wd>
<space/>
</run>
</ln>
</document>
所以你可以使用模板匹配
来很好地处理这个问题<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ss="http://www.scansoft.com/omnipage/xml/ssdoc-schema3.xsd">
<xsl:output method="text" />
<xsl:template match="/">
<xsl:apply-templates select="//ss:ln" />
</xsl:template>
<!-- for a ln, process the descendant words and spaces in document order -->
<xsl:template match="ss:ln">
<xsl:apply-templates select=".//ss:wd | .//ss:space | .//ss:tab" />
<xsl:text> </xsl:text><!-- and add a newline character to the end -->
</xsl:template>
<!-- replace <space/> with a single space character -->
<xsl:template match="ss:space">
<xsl:text> </xsl:text>
</xsl:template>
<!-- replace <tab/> with a single tab character -->
<xsl:template match="ss:tab">
<xsl:text>	</xsl:text>
</xsl:template>
<!-- wd elements use the default built in template rule that will
just output their contained text -->
</xsl:stylesheet>
如果您有任何包含前导或尾随空格的wd
元素,那么您可能需要添加一个显式模板来处理这些:
<xsl:template match="ss:wd">
<xsl:value-of select="normalize-space()" />
</xsl:template>
答案 1 :(得分:0)
我希望我的XSLT文档要做的是打印每行中的单词 在他们自己的输出行上(即检测XML文档中的单词) 并“保留”他们的格式。)
也许你可以简单地通过:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ss="http://www.scansoft.com/omnipage/xml/ssdoc-schema3.xsd">
<xsl:output method="text" encoding="utf-8" />
<xsl:template match="/">
<xsl:for-each select="descendant::ss:ln">
<xsl:for-each select="descendant::ss:wd">
<xsl:value-of select="." />
<xsl:if test="position()!=last()">
<xsl:text>, </xsl:text>
</xsl:if>
</xsl:for-each>
<xsl:if test="position()!=last()">
<xsl:text> </xsl:text>
</xsl:if>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
不确定“保留”他们的格式“是什么意思 - 尤其是当输出是纯文本时。