XSLT:复制 <mathml> 的所有子元素,不带 m: 命名空间,而无需为每个元素创建模板
Posted
技术标签:
【中文标题】XSLT:复制 <mathml> 的所有子元素,不带 m: 命名空间,而无需为每个元素创建模板【英文标题】:XSLT: copy all the children of <mathml> without the m: namespace without having to create a template for each element 【发布时间】:2018-05-16 05:07:20 【问题描述】:这是我的输入:
<mathml>
<m:math xmlns:m="http://www.w3.org/1998/Math/MathML">
<m:mrow>
<m:mtext>SL depreciation expense</m:mtext>
<m:mo>=</m:mo>
<m:mfrac>
<m:mrow>
<m:mtext>cost−residual value</m:mtext>
</m:mrow>
<m:mrow>
<m:mtext>useful life</m:mtext>
</m:mrow>
</m:mfrac>
</m:mrow>
</m:math>
</mathml>
这是预期的输出
<math xmlns="http://www.w3.org/1998/Math/MathML">
<mrow>
<mtext>SL depreciation expense</mtext>
<mo>=</mo>
<mfrac>
<mrow>
<mtext>cost−residual value</mtext>
</mrow>
<mrow>
<mtext>useful life</mtext>
</mrow>
</mfrac>
</mrow>
</math>
我想复制没有 m: 前缀命名空间的 mathml 节点的所有子节点而不必为每个元素创建模板。 您能为此提出任何解决方案吗?
【问题讨论】:
【参考方案1】:你可以使用下面的sn-p复制math
里面的内容
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
要删除命名空间,您应该使用xsl:element
创建您的元素,看看this answer 会帮助您执行此操作。
【讨论】:
查看我的输出。我想复制没有 m: 前缀命名空间的节点。【参考方案2】:尝试拥有:
<xsl:template match="m:*">
<xsl:element name="local-name()" namespace="http://www.w3.org/1998/Math/MathML">
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
见http://xsltfiddle.liberty-development.net/6qVRKvZ。
【讨论】:
以上是关于XSLT:复制 <mathml> 的所有子元素,不带 m: 命名空间,而无需为每个元素创建模板的主要内容,如果未能解决你的问题,请参考以下文章
MathML 标记无法在 JavaFX WebView 中正确呈现