2

InDesignからXMLファイルをエクスポートしています。このファイルのテキストには、特定の文法概念を参照する上付き文字が含まれています。ただし、これらの上付き文字はXMLファイルのテキストとしてエクスポートされます。XSLTを作成して、InDesignファイルに適用すると、上付き文字に小さなタグが追加されるようにする必要があります。

エクスポート方法は次のとおりです。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Root>
<Content>
<PhraseNative aid:table="cell" aid:crows="1" aid:ccols="1" aid:ccolwidth="260.5">
<Phrase>    1.  Mark is1a playing2 videogames.</Phrase> 
</PhraseNative>
</Content>
</Root>  

これが最終的なコードになります。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Root>
<Content>
<PhraseNative aid:table="cell" aid:crows="1" aid:ccols="1" aid:ccolwidth="260.5">
<Phrase>    1.  Mark is<tag>1a</tag> playing<tag>2</tag> videogames.</Phrase> 
</PhraseNative>
</Content>
</Root>

これらのタグは、数字と文字が文字列の最後の2桁または3桁である場合は常に表示されます。時々それはただの数になるでしょう。出力はまったく変化しません。これは、Webページにエクスポートして戻すときにタグが失われないようにするためです。

4

1 に答える 1

1

質問にXSLT2.0のタグを付けたので、ここに2.0のオプションがあります。

注:aidプレフィックスにダミーのxmlnsを追加する必要がありました。

また、おそらく正規表現を改良する必要がありますが、これで始めることができます。

XML入力

<Root>
  <Content>
    <PhraseNative aid:table="cell" aid:crows="1" aid:ccols="1" aid:ccolwidth="260.5" xmlns:aid="somexmlns">
      <Phrase>    1.  Mark is1a playing2 videogames.</Phrase> 
    </PhraseNative>
  </Content>
</Root>

XSLT 2.0

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:aid="somexmlns">
  <xsl:output indent="yes"/>
  <xsl:strip-space elements="*"/>

  <xsl:template match="node()|@*">
    <xsl:copy>
      <xsl:apply-templates select="node()|@*"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="Phrase">
    <xsl:copy>
      <xsl:apply-templates select="@*"/>
      <xsl:analyze-string select="." regex="([a-z]+)([0-9]+[a-z]*)">
        <xsl:matching-substring>
          <xsl:value-of select="regex-group(1)"/>
          <tag>
            <xsl:value-of select="regex-group(2)"/>    
          </tag>
        </xsl:matching-substring>
        <xsl:non-matching-substring><xsl:value-of select="."/></xsl:non-matching-substring>
      </xsl:analyze-string>
    </xsl:copy>
  </xsl:template>

</xsl:stylesheet>

XML出力

<Root>
   <Content>
      <PhraseNative xmlns:aid="somexmlns" aid:table="cell" aid:crows="1" aid:ccols="1"
                    aid:ccolwidth="260.5">
         <Phrase>    1.  Mark is<tag>1a</tag> playing<tag>2</tag> videogames.</Phrase>
      </PhraseNative>
   </Content>
</Root>

Saxon-HE9.3を使用してテスト。

于 2012-05-01T19:43:12.147 に答える