使用XSLT删除额外的组级别

时间:2017-03-23 13:45:22

标签: xml xslt xslt-2.0

我需要删除生成的输出中的额外组级别。我的要求是,我需要每10个字符拆分元素<FFF>中的数据。我的代码几乎正常工作,但它填充了额外的组级别<FinalRecord>。这是我的XML文件:

INPUT

<RootParent>
<Data>
    <DetailRecord>
        <AAA>6</AAA>
        <BBB>22</BBB>
        <CCC>000000CC</CCC>
    </DetailRecord>
    <FinalRecord>
        <FFF>This is only for testing. I repeat. This is only for testing</FFF>
    </FinalRecord>
</Data>
</RootParent>

生成的输出

<RootParent>
<Data>
    <DetailRecord>
        <AAA>6</AAA>
        <BBB>22</BBB>
        <CCC>000000CC</CCC>
    </DetailRecord>
    <FinalRecord>
        <FinalRecord>
            <FFF>This is on</FFF>
        </FinalRecord>
        <FinalRecord>
            <FFF>ly for tes</FFF>
        </FinalRecord>
        <FinalRecord>
            <FFF>ting. I re</FFF>
        </FinalRecord>
        <FinalRecord>
            <FFF>peat. This</FFF>
        </FinalRecord>
        <FinalRecord>
            <FFF> is only f</FFF>
        </FinalRecord>
        <FinalRecord>
            <FFF>or testing</FFF>
        </FinalRecord>
        <FinalRecord>
            <FFF>. This is </FFF>
        </FinalRecord>
        <FinalRecord>
            <FFF>only</FFF>
        </FinalRecord>
    </FinalRecord>
</Data>
</RootParent>

预期输出

<RootParent>
<Data>
    <DetailRecord>
        <AAA>6</AAA>
        <BBB>22</BBB>
        <CCC>000000CC</CCC>
    </DetailRecord>
    <FinalRecord>
        <FFF>This is on</FFF>
    </FinalRecord>
    <FinalRecord>
        <FFF>ly for tes</FFF>
    </FinalRecord>
    <FinalRecord>
        <FFF>ting. I re</FFF>
    </FinalRecord>
    <FinalRecord>
        <FFF>peat. This</FFF>
    </FinalRecord>
    <FinalRecord>
        <FFF> is only f</FFF>
    </FinalRecord>
    <FinalRecord>
        <FFF>or testing</FFF>
    </FinalRecord>
    <FinalRecord>
        <FFF>. This is </FFF>
    </FinalRecord>
    <FinalRecord>
        <FFF>only</FFF>
    </FinalRecord>
</Data>
</RootParent>

我的XSLT代码

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml"/>
<xsl:strip-space elements="*"/>
<xsl:template match="@*|node()">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
</xsl:template>
<xsl:template match="FFF">
    <xsl:analyze-string regex=".{{10}}" select=".">
        <xsl:matching-substring>
            <FinalRecord>
                <FFF>
                    <xsl:value-of select="."/>
                </FFF>
            </FinalRecord>
        </xsl:matching-substring>
        <xsl:non-matching-substring>
            <FinalRecord>
                <FFF>
                    <xsl:value-of select="."/>
                </FFF>
            </FinalRecord>
        </xsl:non-matching-substring>
    </xsl:analyze-string>
</xsl:template>
</xsl:stylesheet>

我的代码中是否有错误或缺失?我被困住了,不知道该怎么做。我尝试在<xsl:template match="FinalRecord"/>之后插入<xsl:template match="@*|node()">以删除XML文件中的记录<FinalRecord>,但它不起作用。我正在使用XSLT v2.0。

非常感谢您的反馈。

谢谢。

1 个答案:

答案 0 :(得分:3)

注意:

元素QVariant MyModel::data(const QModelIndex &item, int role) const { if (role == Qt::DisplayRole) { return "This is view item text"; } else if (role == Qt::ToolTipRole) { // Here you should decide what to return. if (someCondition) return "This is the actual tool tip"; else return "Something else"; } return QAbstractItemModel::data(item, role); } 由&#34; identity-copy-template&#34;处理。因为没有其他匹配规则。

  

我尝试在FinalRecord之后将<xsl:template match="FinalRecord"/>插入删除 XML文件中的记录,但它没有用。

删除有点不对劲。您需要处理元素BUT而不再创建相同的元素。

见:

<xsl:template match="@*|node()">