XML을 TeX로 전송하는 XSLT-cascade가 있습니다. 마지막 단계에서는 두 개의 태그 사이에 모든 텍스트가있는 간단한 xml 파일이 있고 여러 검색을 적용하고 루틴을 바꾸기를 원합니다.XSLT가 문장 부호를 검색하고 바꿉니다.
따라서이 같은 입력 파일이 XSLT 적용
<start>
.–
,–
{–
</start>
(더 많거나 적은 그대로 Replacing strings in various XML files에서 촬영)
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:param name="list">
<words>
<word>
<search>/</search>
<replace>\allowbreak\,\slash\,\allowbreak{}</replace>
</word>
<word>
<search>.–</search>
<replace>{\dotdash}</replace>
</word>
<word>
<search>,–</search>
<replace>{\commadash}</replace>
</word>
<word>
<search>;–</search>
<replace>{\semicolondash}</replace>
</word>
<word>
<search>!–</search>
<replace>{\excdash}</replace>
</word>
</words>
</xsl:param>
<xsl:template match="@*|*|comment()|processing-instruction()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="text()">
<xsl:variable name="search" select="concat('(',string-join($list/words/word/search,'|'),')')"/>
<xsl:analyze-string select="." regex="{$search}">
<xsl:matching-substring>
<xsl:value-of select="$list/words/word[search=current()]/replace"/>
</xsl:matching-substring>
<xsl:non-matching-substring>
<xsl:value-of select="."/>
</xsl:non-matching-substring>
</xsl:analyze-string>
</xsl:template>
</xsl:stylesheet>
다음과 같은 출력이 있어야합니다
을\ dotdash {}
\ commadash {}
{- 불행하게도
는 "{-"뭔가를 트리거 보인다 사라집니다. 왜 그 이유를 설명 할 수 있습니까?
XSLT 3.0에서는 정규 표현식의 모든 문자가 자신을 나타내는 것으로 간주되도록 flags = "q"를 사용할 수 있습니다. 하지만 물론 "|"을 사용할 수 없습니다. 대안을 구분할 수 있습니다. –