如何检查销点和合并文本 - XSLT

问题描述 投票:0回答:1

引脚点。当一个案件被多次引用,且有不同的引脚点时,所有条目应被视为表中的一个条目。在本例中,第一个条目(932,942)和第二个条目(932,945)是针点值。而最终的输出应该是一个单一的条目,任何共同的引脚点,在本例中是932。输入XML

<root>
<p><styled-content><italic>Agarwal v Johnson </italic>(1979) 25 C3d 932, 942, overruled on other grounds in <italic>White v Ultramar, Inc.</italic> (1999) 21 C4th 563</styled-content></p>
<p><styled-content><italic>Agarwal v Johnson </italic>(1979) 25 C3d 932, 942, overruled on other grounds in <italic>White v Ultramar, Inc.</italic> (1999) 21 C4th 563</styled-content></p>
<p><styled-content><italic>Agarwal v Johnson </italic>(1979) 25 C3d 932, 945, overruled on other grounds in <italic>White v Ultramar, Inc.</italic> (1999) 21 C4th 563</styled-content></p>
<p><styled-content><italic>Advantacare Health Partners </italic>(1994) US Dist Lexis</styled-content></p>
<p><styled-content><italic>Advantacare Health Partners </italic>(1994) US Dist Lexis</styled-content></p>
<p><styled-content><italic>Alexander v Gardner-Denver Co.</italic> (1974) 415 US 36, 52 n15, 94 S Ct 1011</styled-content></p>
<p><styled-content><italic>Alexander v Gardner-Denver Co.</italic> (1974) 415 US 36, 94 S Ct 1011</styled-content></p>
</root>

XSLT代码

    <xsl:template match="root">
    <xsl:copy>
    <xsl:for-each-group select="p" group-by="styled-content">
        <xsl:text>&#x0A;</xsl:text>
        <p>
            <xsl:copy-of select="current-grouping-key()"/>
        </p>
    </xsl:for-each-group>
    </xsl:copy>
</xsl:template>

预期产出

<root>
<p>Agarwal v Johnson (1979) 25 C3d 932, overruled on other grounds in White v Ultramar, Inc. (1999) 21 C4th 563</p>
<p>Advantacare Health Partners (1994) US Dist Lexis</p>
<p>Alexander v Gardner-Denver Co. (1974) 415 US 36, 94 S Ct 1011</p>
</root>
xslt xslt-2.0
1个回答
1
投票

我已经做了

    <?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    exclude-result-prefixes="xs"
    version="2.0">
    <xsl:output method="xml" omit-xml-declaration="no"/>
    <xsl:template match="root">
        <xsl:copy>
            <xsl:for-each-group select="p/styled-content" group-by="normalize-space(italic[1])">
            <xsl:text>&#x0A;</xsl:text>
            <p>
                <xsl:copy-of select="replace(current-group()[last()], '([0-9]+?, )([0-9]+?, )', '$1')"/>
            </p>
        </xsl:for-each-group>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>
© www.soinside.com 2019 - 2024. All rights reserved.