1

現在、javadoc XML 出力 (変更不可) を再構成されたテキストに変換する XSLT ドキュメントを作成しています。私が抱えている問題の 1 つは、javadoc にこのような構造の XML が含まれることです。

<node1>
   <node2>
       <code/>
   </node2>

   <node3>
      <![CDATA[DataType]]>
   </node3>
</node1>

<node1>
   <node3>
      <![CDATA[s need special formatting, but breaks in restructured text]]>
   </node3>
</node1>

これにより ASCII 出力が生成されます ( のnode2/code中にが存在node1するということは、それを `` で囲む必要があることを意味します)。

``DataType``s need special formatting, but break in restructured text

再構成されたテキストでは、終わりの `` の後に英数字を続けることができないか、適切にレンダリングされないため、前の出力の代わりに、一致する次のノード//node1/node3に最初の文字がないかどうかを確認できる必要があります英数字として、そうである場合はそのように区切ります

``DataType``\s need special formatting, but breaks in restructured text

でも句読点なら以下でいい

``DataType``. need special formatting, but breaks in restructured text

これは XSLT2.0 で可能ですか?

4

1 に答える 1

3

先を見ようとするよりも、「後ろを見る」方が簡単かもしれません。

<xsl:template match="node1/node3" priority="1">
  <xsl:value-of select="." />
</xsl:template>

<xsl:template match="node1[node2/code]/node3" priority="2">
  <xsl:text>``</xsl:text>
  <xsl:next-match />
  <xsl:text>``</xsl:text>
</xsl:template>

<!-- special template for the block immediately following a node2/code block -->
<xsl:template match="node1[preceding-sibling::node1[1]/node2/code]/node3" priority="3">
  <xsl:if test="matches(., '^[A-Za-z0-9]')">\</xsl:if>
  <xsl:next-match />
</xsl:template>

ifを一致式にマージすることもできます

<xsl:template match="node1[preceding-sibling::node1[1]/node2/code]
                     /node3[matches(., '^[A-Za-z0-9]')]" priority="3">
  <xsl:text>\</xsl:text>
  <xsl:next-match />
</xsl:template>
于 2013-02-08T14:33:15.750 に答える