XML
<root>
<Algemeen>
<foto>
<foe>
<fee>
<img src="www.blah.com/sample.jif"></img>
</fee>
</foe>
</foto>
</Algemeen>
</root>
XSLT
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<result>
<xsl:apply-templates select="/root/Algemeen/foto/foe/fee/img"/>
</result>
</xsl:template>
<!--specific template match for this img -->
<xsl:template match="/root/Algemeen/foto/foe/fee/img">
<xsl:copy>
<xsl:attribute name="width">100</xsl:attribute>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
<!--Identity template copies content forward -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
我正在通过模板向“img”标签添加属性,如何获得整个“foto”节点?这是“@ * | node()”是指第二级父节点“foe”?
查看了链接:
答案 0 :(得分:0)
这是“@ * | node()”是指第二级父节点“foe”?
都能跟得上!这指的是子节点和属性。
如何复制
<img>
添加属性及其祖父<foto>
??
在您的代码中,您通过说<xsl:template match="/">
来匹配根节点,并将其重命名为<result>
。在那之下你说<xsl:apply-templates select="/root/Algemeen/foto/foe/fee/img"/>
..所以这将跳过层次结构并执行<xsl:template match="/root/Algemeen/foto/foe/fee/img">
所说的..
您的<xsl:template match="/root/Algemeen/foto/foe/fee/img">
模板看起来很完美!!你需要的只是低于修正!
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<result>
<xsl:apply-templates select="/root/Algemeen/foto"/>
</result>
</xsl:template>
<xsl:template match="foto">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<!--specific template match for this img -->
<xsl:template match="/root/Algemeen/foto/foe/fee/img">
<xsl:copy>
<xsl:attribute name="width">100</xsl:attribute>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
<!--Identity template copies content forward -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
如果您想访问父母或祖先,请尝试以下方法:
<xsl:for-each select="ancestor::foto">