XSL apply-templates 也适用于不匹配的元素
XSL apply-templates works with not matching elements too
我有一个输入 Xml 比如:
<?xml version="1.0" encoding="UTF-8"?>
<Merge>
<Object>
<Value name="Name" type="Number">Hans</Value>
<Value name="Vorname" type="Number">Peter</Value>
<Value name="Gebort" type="Number">Germany</Value>
</Object>
<Data>
<getGender>
<get_Gender>male</get_Gender>
</getGender>
</Data>
</Merge>
还有像这样的 xsl:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output media-type="text/xml" method="xml"></xsl:output>
<xsl:template match="/">
<Features>
<xsl:apply-templates></xsl:apply-templates>
<Feature name="gender"><xsl:value-of select="//get_Gender"></xsl:value-of></Feature>
</Features>
</xsl:template>
<xsl:template match="Value">
<Feature name="{@name}"><xsl:value-of select="."></xsl:value-of></Feature>
</xsl:template>
</xsl:stylesheet>
我的输出是:
<Features>
<Feature name="Name">Hans</Feature>
<Feature name="Vorname">Peter</Feature>
<Feature name="Gebort">Germany</Feature>
male
<Feature name="gender">male</Feature>
</Features>
但是为什么??
我想要类似的东西:
<Features>
<Feature name="Name">Hans</Feature>
<Feature name="Vorname">Peter</Feature>
<Feature name="Gebort">Germany</Feature>
<Feature name="gender">male</Feature>
</Features>
为什么我的输出中出现这个随机的“男性”,我认为这与
<apply-templates>
但我不知道为什么它会这样。
有内置模板可以通过 <xsl:apply-templates></xsl:apply-templates>
输出文本节点,您可以递归地处理该级别的所有子节点,因此 <xsl:apply-templates select="Merge/Object"/>
或确保您有一个空的 <xsl:template match="get_Gender"/>
.
除非您正在做与示例所示不同的事情,否则您也可以删除模板应用程序并直接遍历节点:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output media-type="text/xml" method="xml"></xsl:output>
<xsl:template match="/">
<Features>
<xsl:for-each select="Merge/Object/Value">
<Feature name="{@name}"><xsl:value-of select="."></xsl:value-of>
</Feature>
</xsl:for-each>
<Feature name="gender"><xsl:value-of select="Merge/Data/getGender/get_Gender"/>
</Feature>
</Features>
</xsl:template>
</xsl:stylesheet>
我有一个输入 Xml 比如:
<?xml version="1.0" encoding="UTF-8"?>
<Merge>
<Object>
<Value name="Name" type="Number">Hans</Value>
<Value name="Vorname" type="Number">Peter</Value>
<Value name="Gebort" type="Number">Germany</Value>
</Object>
<Data>
<getGender>
<get_Gender>male</get_Gender>
</getGender>
</Data>
</Merge>
还有像这样的 xsl:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output media-type="text/xml" method="xml"></xsl:output>
<xsl:template match="/">
<Features>
<xsl:apply-templates></xsl:apply-templates>
<Feature name="gender"><xsl:value-of select="//get_Gender"></xsl:value-of></Feature>
</Features>
</xsl:template>
<xsl:template match="Value">
<Feature name="{@name}"><xsl:value-of select="."></xsl:value-of></Feature>
</xsl:template>
</xsl:stylesheet>
我的输出是:
<Features>
<Feature name="Name">Hans</Feature>
<Feature name="Vorname">Peter</Feature>
<Feature name="Gebort">Germany</Feature>
male
<Feature name="gender">male</Feature>
</Features>
但是为什么?? 我想要类似的东西:
<Features>
<Feature name="Name">Hans</Feature>
<Feature name="Vorname">Peter</Feature>
<Feature name="Gebort">Germany</Feature>
<Feature name="gender">male</Feature>
</Features>
为什么我的输出中出现这个随机的“男性”,我认为这与
<apply-templates>
但我不知道为什么它会这样。
有内置模板可以通过 <xsl:apply-templates></xsl:apply-templates>
输出文本节点,您可以递归地处理该级别的所有子节点,因此 <xsl:apply-templates select="Merge/Object"/>
或确保您有一个空的 <xsl:template match="get_Gender"/>
.
除非您正在做与示例所示不同的事情,否则您也可以删除模板应用程序并直接遍历节点:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output media-type="text/xml" method="xml"></xsl:output>
<xsl:template match="/">
<Features>
<xsl:for-each select="Merge/Object/Value">
<Feature name="{@name}"><xsl:value-of select="."></xsl:value-of>
</Feature>
</xsl:for-each>
<Feature name="gender"><xsl:value-of select="Merge/Data/getGender/get_Gender"/>
</Feature>
</Features>
</xsl:template>
</xsl:stylesheet>