0

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()”是指第二级父节点“敌人”吗?

查看的链接:

4

1 回答 1

0

这个“@*|node()”是指第二级父节点“敌人”吗?

没有!这是指子节点和属性..

如何复制<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">
于 2012-12-07T07:57:36.880 回答