0

<math>要素と出力<math>要素のみをグループ化する必要があります。以下の XSLT を試してみました。要素はドキュメントのどこにでも発生する可能性があり、ルート要素も変更される可能性があることに注意してください

XSLT 1.0 が試した:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:m="http://www.w3.org/1998/Math/MathML">
<xsl:key name="aKey" match="m:math" use="."/>

<xsl:template match="node()">
<xsl:copy-of select="key('aKey',m:math)"/>
</xsl:template>
</xsl:stylesheet>

サンプル XML:

<?xml version="1.0"?>
<chapter xmlns:m="http://www.w3.org/1998/Math/MathML">
<p>This is sample text
<a><math>This is math</math></a></p>
<a>This is a</a>
<math>This is math</math>
<a>This is a</a>
<a>This is a</a>
<b>This is <math>This is math</math>b</b>
<c>This is C</c>
</chapter>

必要な出力:

<math>This is math</math>
<math>This is math</math>
<math>This is math</math>
4

1 に答える 1

0

これはそれを行います:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output omit-xml-declaration="yes" />

  <xsl:template match="math | math//*" priority="2">
    <xsl:element name="{name()}">
      <xsl:apply-templates select="@* | node()" />
    </xsl:element>
  </xsl:template>

  <xsl:template match="math//@* | math//node()">
    <xsl:copy />
  </xsl:template>

  <xsl:template match="text()" />
</xsl:stylesheet>

サンプル入力で実行すると、次が生成されます。

<math>This is math</math>
<math>This is math</math>
<math>This is math</math>

同じ出力を生成するキーを使用するアプローチ:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output omit-xml-declaration="yes" />
  <xsl:key name="kMath" match="math" use="''" />

  <xsl:template match="/">
    <xsl:apply-templates select="key('kMath', '')" />
  </xsl:template>

  <xsl:template match="*">
    <xsl:element name="{name()}">
      <xsl:apply-templates select="@* | node()" />
    </xsl:element>
  </xsl:template>

  <xsl:template match="@* | node()" priority="-2">
    <xsl:copy />
  </xsl:template>
</xsl:stylesheet>
于 2013-03-11T13:32:17.753 に答える