在我的请求中有大约500个子元素,这些元素具有属性id,id是可选元素。我使用波纹管代码片段来转换我的请求ID属性。
<xsl:if test="@id">
<xsl:attribute name="id">
<xsl:value-of select="@id" />
</xsl:attribute>
</xsl:if>
有没有办法在常见的地方进行<xsl:if test="@id">
验证,影响到所有地方。否则我必须在每个地方检查这个。
请指教。比你......
答案 0 :(得分:1)
该片段基本上将id
属性从输入复制到输出(如果存在),否则不执行任何操作。
<xsl:copy-of select="@id"/>
因为如果所选节点集为空,copy-of
不执行任何操作。
答案 1 :(得分:1)
我没有看到你的代码除了复制已有的代码之外还做了什么。
在任何情况下,如果要将转换应用于具有id
属性的所有元素,请编写与该属性匹配的模板,例如:
<xsl:template match="@id">
<xsl:attribute name="new-id">
<xsl:value-of select="." />
</xsl:attribute>
</xsl:template>
这将保留现有值并重命名属性。
答案 2 :(得分:1)
通常,您将使用身份转换模板
启动样式表<xsl:template match="@* | node()" mode="#all">
<xsl:copy>
<xsl:apply-templates select="@* , node()" mode="#current"/>
</xsl:copy>
</xsl:template>
逐级逐级复制所有内容。然后,您可以为需要特殊处理的元素和/或属性添加模板。
现在,只要您确保元素的模板执行<xsl:apply-templates select="@*"/>
或<xsl:apply-templates select="@id"/>
,就会复制属性。
如果你想转换一个元素,那么添加一个模板,例如。
<xsl:template match="/Address">
<Add>
<xsl:apply-templates select="@* , node()"/>
</Add>
</xsl:template>