我需要将<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>
答案 0 :(得分: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>