请帮我看一下mmlmsubsup的第三个孩子以mmlmi为属性开始。
找到下面给出的XML,建议根据其位置和父级删除特定元素。
<article><mmlmath><mmlmsubsup><mmlmrow><mmlmi>A</mmlmi></mmlmrow><mmlmrow><mmlmi>b</mmlmi></mmlmrow><mmlmrow><mmlmi mathcolor="magenta">#</mmlmi><mmlmo>(</mmlmo><mmlmo>c</mmlmo><mmlmo>)</mmlmo></mmlmrow></mmlmsubsup></mmlmath></article>
SubSup.xslt:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="*">
<xsl:element name="{local-name()}">
<xsl:apply-templates select="@* | node()"/>
</xsl:element>
</xsl:template>
<xsl:template match="@*">
<xsl:attribute name="{local-name()}">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:template>
<xsl:template match="mmlmsubsup">
<mmlmsubsup>
<xsl:for-each select="child::*[1]">
<xsl:choose>
<xsl:when test="child::*[1][name()='mmlmrow']">
<xsl:copy><xsl:apply-templates/></xsl:copy>
</xsl:when>
<xsl:otherwise><xsl:copy><xsl:apply-templates/></xsl:copy></xsl:otherwise>
</xsl:choose>
</xsl:for-each>
<xsl:for-each select="child::*[2]">
<xsl:choose>
<xsl:when test="child::*[1][name()='mmlmrow']">
<xsl:for-each select="mmlmrow">
<xsl:if test="child::*[1][name()='mmlmi'][@mathcolor]">delete</xsl:if>
<xsl:if test="not(child::*[name()='mmlmi'][@mathcolor])"><xsl:copy><xsl:apply-templates/></xsl:copy></xsl:if>
</xsl:for-each>
<xsl:copy><xsl:apply-templates/></xsl:copy>
</xsl:when>
<xsl:otherwise><xsl:copy><xsl:apply-templates/></xsl:copy></xsl:otherwise>
</xsl:choose>
</xsl:for-each>
<xsl:for-each select="child::*[3]">
<xsl:choose>
<xsl:when test="child::*[1][name()='mmlmrow']">
<xsl:for-each select="mmlmrow">
<xsl:if test="child::*[1][name()='mmlmi'][@mathcolor]">delete</xsl:if>
<xsl:if test="not(child::*[name()='mmlmi'][@mathcolor])"><xsl:copy><xsl:apply-templates/></xsl:copy></xsl:if>
</xsl:for-each>
<xsl:copy><xsl:apply-templates/></xsl:copy>
</xsl:when>
<xsl:otherwise><xsl:copy><xsl:apply-templates/></xsl:copy></xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</mmlmsubsup>
</xsl:template>
</xsl:stylesheet>
必需的OutPut:
删除属性“mathcolor”的“mmlmi”元素,如果mmlmi被发现为mmlmsubsub ancetor的第二个和第三个mmlmrow的第一个孩子。
答案 0 :(得分:1)
如果找到mmlmi,则删除属性“mathcolor”的“mmlmi”元素 mmlmsubsub ancetor的第二个和第三个mmlmrow的第一个孩子。
我认为转换为:
<xsl:template match="mmlmi[@mathcolor]
[local-name(ancestor::mmlmsubsup/mmlmrow[2]/*[1])='mmlmi']
[local-name(ancestor::mmlmsubsup/mmlmrow[3]/*[1])='mmlmi']" />
很难确定,因为(1)配方不太清楚,(2)源XML不是很好的测试材料。