首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我们不会像预期的那样使用XSL在输出XML格式中获得不同的页面和文本。

我们不会像预期的那样使用XSL在输出XML格式中获得不同的页面和文本。
EN

Stack Overflow用户
提问于 2021-10-09 10:39:35
回答 1查看 64关注 0票数 0

XSL是一种用于表示样式表的语言。XSL样式表和CSS一样,是一个描述如何显示给定类型的XML文档的文件。因此,使用XML,我希望将完整的xml转换为简单的XML。

我从ABBYY FineReader获取XML文件,这太复杂了。我只需将其转换为简化的XML。我创建了一个XSL文件来将src.xml转换为target.xml。但我没有得到正确的预期输出文件。

如果有人对此有任何想法,请尽快帮助我。

下面是复杂的XML文件,我想将其转换为简化的XML文件。

源代码:

代码语言:javascript
运行
复制
        <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <document xmlns="http://www.abbyy.com/FineReader_xml/FineReader10-schema-v1.xml" version="1.0" producer="ABBYY FineReader Engine 12" languages="" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.abbyy.com/FineReader_xml/FineReader10-schema-v1.xml http://www.abbyy.com/FineReader_xml/FineReader10-schema-v1.xml">
        <page width="294" height="189" resolution="120" originalCoords="1">
        <block blockType="Text" blockName="" l="0" t="5" r="272" b="185"><region><rect l="0" t="5" r="272" b="185"/></region>
        <text>
        <par lineSpacing="2410">
        <line baseline="30" l="1" t="6" r="72" b="30"><formatting lang="EnglishUnitedStates">hello</formatting></line></par>
        <par lineSpacing="1840">
        <line baseline="87" l="0" t="69" r="179" b="87"><formatting lang="EnglishUnitedStates">this is a website</formatting></line></par>
        <par lineSpacing="1260">
        <line baseline="136" l="0" t="122" r="269" b="140"><formatting lang="EnglishUnitedStates">Is the writing getting smaller?</formatting></line></par>
        <par lineSpacing="1260">
        <line baseline="182" l="0" t="169" r="133" b="182"><formatting lang="EnglishUnitedStates">IM SHRINKING</formatting></line></par>
        </text>
        <text>
        <par lineSpacing="2410">
        <line baseline="30" l="1" t="6" r="72" b="30"><formatting lang="EnglishUnitedStates">10</formatting></line></par>
        <par lineSpacing="1840">
        <line baseline="87" l="0" t="69" r="179" b="87"><formatting lang="EnglishUnitedStates">20</formatting></line></par>
        <par lineSpacing="1260">
        <line baseline="136" l="0" t="122" r="269" b="140"><formatting lang="EnglishUnitedStates">30</formatting></line></par>
        <par lineSpacing="1260">
        <line baseline="182" l="0" t="169" r="133" b="182"><formatting lang="EnglishUnitedStates">40</formatting></line></par>
        </text>
        </block>
        </page>
        
        <page width="294" height="189" resolution="120" originalCoords="1">
        <block blockType="Text" blockName="" l="0" t="5" r="272" b="185"><region><rect l="0" t="5" r="272" b="185"/></region>
        <text>
        <par lineSpacing="2410">
        <line baseline="30" l="1" t="6" r="72" b="30"><formatting lang="EnglishUnitedStates">hii</formatting></line></par>
        <par lineSpacing="1840">
        <line baseline="87" l="0" t="69" r="179" b="87"><formatting lang="EnglishUnitedStates">Demo for XSL</formatting></line></par>
        </text>
        </block>
        </page>
        </document>

期望输出

这里是我想要的简化的XML

代码语言:javascript
运行
复制
        <?xml version="1.0" encoding="UTF-8"?>
        <document>
            <page>
                <block blockType="Text">
                    <text>
                        <paragraph>
                            <line>hello</line>
                        </paragraph>
                        <paragraph>
                            <line>this is a website</line>
                        </paragraph>
                        <paragraph>
                            <line>Is the writing getting smaller?</line>
                        </paragraph>
                        <paragraph>
                            <line>IM SHRINKING</line>
                        </paragraph>
                    </text>
                    <text>
                        <paragraph>
                            <line>10</line>
                        </paragraph>
                        <paragraph>
                            <line>20</line>
                        </paragraph>
                        <paragraph>
                            <line>30</line>
                        </paragraph>
                        <paragraph>
                            <line>40</line>
                        </paragraph>
                    </text>
                </block>
            </page>
            <page>
                <block blockType="Text">
                    <text>
                        <paragraph>
                            <line>hii</line>
                        </paragraph>
                        <paragraph>
                            <line>Demo for XSL</line>
                        </paragraph>
                    </text>
                </block>
            </page>
        </document>

XSL码

这里是XSL,我们从它将复杂的转换成简单的XML

代码语言:javascript
运行
复制
        <?xml version="1.0" encoding="UTF-8"?>
        <xsl:stylesheet version="2.0"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xpath-default-namespace="http://www.abbyy.com/FineReader_xml/FineReader10-schema-v1.xml">
            <xsl:output method="xml" indent="yes"/>
            <xsl:template match="/">
                <document>
                    <page>
                        <block>
                            <xsl:variable name="blockType" select="/document/page/block/@blockType"/>
                            <!-- The variable blockType can be used for further processing.  -->
                            <xsl:attribute name="blockType"><xsl:value-of select="$blockType"/></xsl:attribute>
                           <xsl:for-each select="/document/page/block/text">
                           <text>
                                <xsl:for-each select="/document/page/block/text/par">
                                    <paragraph>
                                        <line>
                                            <xsl:value-of   select="./line"/>
                                        </line>
                                    </paragraph>
                                </xsl:for-each>
                            </text>
                            </xsl:for-each>
                        </block>
                    </page>
                </document>
            </xsl:template>
        </xsl:stylesheet>

实际输出

代码语言:javascript
运行
复制
        <?xml version="1.0" encoding="UTF-8"?>
        <document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
           <page>
              <block blockType="Text Text">
                 <text>
                    <paragraph>
                       <line>hello</line>
                    </paragraph>
                    <paragraph>
                       <line>this is a website</line>
                    </paragraph>
                    <paragraph>
                       <line>Is the writing getting smaller?</line>
                    </paragraph>
                    <paragraph>
                       <line>IM SHRINKING</line>
                    </paragraph>
                    <paragraph>
                       <line>10</line>
                    </paragraph>
                    <paragraph>
                       <line>20</line>
                    </paragraph>
                    <paragraph>
                       <line>30</line>
                    </paragraph>
                    <paragraph>
                       <line>40</line>
                    </paragraph>
                    <paragraph>
                       <line>hii</line>
                    </paragraph>
                    <paragraph>
                       <line>Demo for XSL</line>
                    </paragraph>
                 </text>
                 <text>
                    <paragraph>
                       <line>hello</line>
                    </paragraph>
                    <paragraph>
                       <line>this is a website</line>
                    </paragraph>
                    <paragraph>
                       <line>Is the writing getting smaller?</line>
                    </paragraph>
                    <paragraph>
                       <line>IM SHRINKING</line>
                    </paragraph>
                    <paragraph>
                       <line>10</line>
                    </paragraph>
                    <paragraph>
                       <line>20</line>
                    </paragraph>
                    <paragraph>
                       <line>30</line>
                    </paragraph>
                    <paragraph>
                       <line>40</line>
                    </paragraph>
                    <paragraph>
                       <line>hii</line>
                    </paragraph>
                    <paragraph>
                       <line>Demo for XSL</line>
                    </paragraph>
                 </text>
                 <text>
                    <paragraph>
                       <line>hello</line>
                    </paragraph>
                    <paragraph>
                       <line>this is a website</line>
                    </paragraph>
                    <paragraph>
                       <line>Is the writing getting smaller?</line>
                    </paragraph>
                    <paragraph>
                       <line>IM SHRINKING</line>
                    </paragraph>
                    <paragraph>
                       <line>10</line>
                    </paragraph>
                    <paragraph>
                       <line>20</line>
                    </paragraph>
                    <paragraph>
                       <line>30</line>
                    </paragraph>
                    <paragraph>
                       <line>40</line>
                    </paragraph>
                    <paragraph>
                       <line>hii</line>
                    </paragraph>
                    <paragraph>
                       <line>Demo for XSL</line>
                    </paragraph>
                 </text>
              </block>
           </page>
        </document>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-09 11:55:19

你为什么不简单地做:

XSLT2.0

代码语言:javascript
运行
复制
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xpath-default-namespace="http://www.abbyy.com/FineReader_xml/FineReader10-schema-v1.xml">
<xsl:output method="xml" indent="yes"/>

<xsl:template match="/document">
    <document>
        <xsl:for-each select="page">
            <page>
                <xsl:for-each select="block">
                    <block blockType="{@blockType}">
                       <xsl:for-each select="text">
                           <text>
                                <xsl:for-each select="par">
                                    <paragraph>
                                        <line>
                                            <xsl:value-of select="line"/>
                                        </line>
                                    </paragraph>
                                </xsl:for-each>
                            </text>
                        </xsl:for-each>
                    </block>
                </xsl:for-each>
            </page>
        </xsl:for-each>
    </document>
</xsl:template>

</xsl:stylesheet>

或者甚至更简单:

代码语言:javascript
运行
复制
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xpath-default-namespace="http://www.abbyy.com/FineReader_xml/FineReader10-schema-v1.xml">
<xsl:output method="xml" indent="yes"/>

<xsl:template match="*">
    <xsl:element name="{local-name()}">
        <xsl:apply-templates/>
    </xsl:element>
</xsl:template>

<xsl:template match="block">
    <block blockType="{@blockType}">
        <xsl:apply-templates select="text"/>    
    </block>        
</xsl:template> 

<xsl:template match="par">
    <paragraph>
        <line>
            <xsl:value-of select="line"/>
        </line>
    </paragraph>
</xsl:template>
        
</xsl:stylesheet>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69505957

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档