如何根据变量的值在XSLT 2.0中进行标记?

时间:2014-03-27 14:47:13

标签: xml regex xslt tokenize

我有这个文字

  

DìsManibus。 / Iuliae Fortu = / natae /vìx(it)ann(是)   XIV,m(ensibus)XI,/ et matri eius。 <:in latere intuentibus   sinistro> Ti(berius)Iulius Arsaces /fìliae   pìissimae<:in latere intuentibus dextro> fecit et   sibi et / Pontiae Euhodiae / coniugi suae et /lìbertis   lìbertabus/posterìsqueeorum。

我想用xslt 2.0对它进行标记,以便由<:in latere intuentibus dextro>引入的每个部分都在一个单独的div中。

我试图将它放在一个变量中然后用它来标记,但没有成功。

     <xsl:variable name="parts">
            <xsl:analyze-string select="." regex="(&#12296;)(:.*?)(&#12297;)">
        <xsl:matching-substring>
            <xsl:sequence select="."/> 
        </xsl:matching-substring>
    </xsl:analyze-string>
        </xsl:variable>

    <xsl:template name="edition">
                   <xsl:choose>
 <xsl:when test="contains(., $parts)">
                        <xsl:for-each select="tokenize(., $parts)">


                 <div><xsl:attribute name="n" select="position()"/>
                            <xsl:attribute name="type">textpart</xsl:attribute>
...
</div>
    </xsl:for-each></xsl:when></xsl:choose>

    </xsl:template>

实际上:如果我的分离文本只有一个实例可以工作,但上面的例子没有两倍的分隔符,应该给我三个令牌。

<div n="1" type="textpart">
                Dìs Manibus.Iuliae Fortunatae vìxit annis XIV, mensibus XI,et matri eius. 
</div>
<div n="2" type="textpart">
Tiberius Iulius Arsaces fìliae pìissimae fecit et sibi et Pontiae Euhodiae coniugi suae et lìbertis lìbertabus posterìsque eorum.
</div>

我想要的结果是

<div n="1" type="textpart">
                    Dìs Manibus.Iuliae Fortunatae vìxit annis XIV, mensibus XI,et matri eius. 
    </div>
    <div n="2" type="textpart">
    Tiberius Iulius Arsaces fìliae pìissimae 
 </div>
    <div n="3" type="textpart">
fecit et sibi et Pontiae Euhodiae coniugi suae et lìbertis lìbertabus posterìsque eorum.
    </div>

非常感谢你的帮助。

2 个答案:

答案 0 :(得分:1)

为什么不简单地使用

<xsl:for-each select="tokenize($yourTextInput, '〈:in latere intuentibus dextro〉')">
  <div n="{position()}" type="textpart">
    <xsl:value-of select="."/>
  </div>
</xsl:for-each>

答案 1 :(得分:0)

可能是点.排除了换行符 要解决这样的问题,可能会 -

编辑取消了英镑符号上的转义,因为实体将被字符替换(我认为)。

(?s)(&#12296;)(:.*?)(&#12297;)
// or  
(&#12296;)(:[\S\s]*?)(&#12297;)