我的XML文件如下所示:
<?xml version="1.0" encoding="UTF-8" ?>
<!-- Diese Grammatik wurde abgelehnt - verwenden Sie stattdessen FMPXMLRESULT. -->
<FMPDSORESULT
xmlns="http://www.filemaker.com/fmpdsoresult">
<ERRORCODE>0</ERRORCODE>
<DATABASE>Test.fmp12</DATABASE>
<LAYOUT></LAYOUT>
<ROW MODID="31" RECORDID="1">
<ID_EXPORT>1</ID_EXPORT>
<artikel_nr>14368</artikel_nr>
<sprache>de</sprache>
<spezifikation><row><titel>HDMI Port Auflösung</titel><attribbut>3840x2160 (UHD) @ 24/25/30 Hz</attribbut><attribbut>2560x1440 (QHD) @ 30/60 Hz</attribbut></row><row><titel>Material</titel><attribbut>Holz</attribbut><attribbut>Stein</attribbut><attribbut>Aluminium</attribbut></row></spezifikation>
</ROW>
</FMPDSORESULT>
&#13;
现在我的问题是,我只想更改元素的输出&#34; spezifikation &#34;因为我想像这样禁用输出转义:
<xsl:value-of select="." disable-output-escaping="yes" />
我找到了这样的例子:
<xsl:template match="*">
<xsl:copy>
<xsl:copy-of select="@*"/>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
但是我无法弄清楚如何为&#34; spezifikation&#34;做出例外?
答案 0 :(得分:0)
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
然后,您只需添加另一个模板即可匹配spezifikation
。但是,您需要考虑在XML中指定了默认命名空间
<FMPDSORESULT xmlns="http://www.filemaker.com/fmpdsoresult">
如果您使用的是XSLT 1.0,则需要通过命名空间前缀在模板匹配中处理此问题...
<xsl:template match="fm:spezifikation" xmlns:fm="http://www.filemaker.com/fmpdsoresult">
试试这个XSLT
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" indent="yes" />
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="fm:spezifikation" xmlns:fm="http://www.filemaker.com/fmpdsoresult">
<xsl:copy>
<xsl:value-of select="." disable-output-escaping="yes" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
您可以使用xpath-default-namespace
来简化XSLT 2.0中的内容。
试试这个XSLT 2.0
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"
xpath-default-namespace="http://www.filemaker.com/fmpdsoresult">
<xsl:output method="xml" indent="yes" />
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="spezifikation">
<xsl:copy>
<xsl:value-of select="." disable-output-escaping="yes" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>