-3

我是 XSLT 转换的新手。
这是我上一个问题的延伸。现在我正在复制所有这样的节点,然后根据上一个问题的答案对其进行转换。

<!-- Copy everything -->
  <xsl:template match="@* | node()">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
  </xsl:template>

但是输入有两个父元素。

<Parent1>
  <Parent11>
    <Element1>
    <!--Rest of the xml I want to work with-->
    </Element1>
   <Parent11>
  <Parent21>
   <Other></Other>
  </Parent21>
<Parent1>

我尝试使用

<xsl:template match="Element1">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
  </xsl:template>

但随后它以纯文本形式返回给我 xml 值。<Parent21>带着孩子的价值观。
根据我尝试过的答案

<xsl:template match="@* | node()">
        <xsl:copy>
          <xsl:apply-templates select="Parent1/Parent11/Element1"/>
        </xsl:copy>
      </xsl:template>

这没有给我任何回报。

4

1 回答 1

0

如果您只想处理 Element1 则保留通常的身份模板

<!-- Copy everything -->
<xsl:template match="@* | node()">
  <xsl:copy>
    <xsl:apply-templates select="@* | node()"/>
  </xsl:copy>
</xsl:template>

并添加另一个模板/

<xsl:template match="/">
  <xsl:apply-templates select="Parent1/Parent11/Element1"/>
</xsl:template>

这将直接“跳过”到 Element1 并从那里继续正常处理,忽略文档的其余部分。然后,您可以使用 Element1 中的其他模板匹配节点来执行您需要的任何其他处理。

如果您的文档中有多个 Element1,那么您需要在它们周围包裹一个根元素以使输出格式正确,例如

<xsl:template match="/">
  <root>
    <xsl:apply-templates select="Parent1/Parent11/Element1"/>
  </root>
</xsl:template>
于 2013-10-10T19:18:48.357 回答