0

如果这似乎是一个非常基本的问题,我很抱歉,但我真的(我的意思是真的)感谢我能得到的任何帮助。我只是尝试执行以下操作:
1. 将自动关闭替换为
2. 从“Second_node”中获取
文本 3. 将该文本存储在变量中
4. 将该文本放入新的“Seventh_node”中。

我已经完成了第 1 步,但我似乎无法从所需元素中检索到必要的信息。我在下面包含了三个示例以及我的工作 XSLT。我猜关键问题是存储“Second_node”的文本内容并将其放置在新元素中。作为补充信息,我使用 Saxon 6.5 进行转换。如果提供的信息不完整,请告诉我。

谢谢你!

源 XML:

<firstnode>
  <Second_node>text for second node</Second_node>
   <Third_node>
     <Fourth_node>
       <Fifth_node>text for fifth node</Fifth_node>
       <Sixth_node>text for sixth node</Sixth_node>
        <Seventh_node />
   </Fourth_node>
 </Third_node>
</firstnode>

到目前为止我所拥有的:

<firstnode>
  <Second_node>text for second node</Second_node>
   <Third_node>
     <Fourth_node>
       <Fifth_node>text for fifth node</Fifth_node>
       <Sixth_node>text for sixth node</Sixth_node>
        <Seventh_node></Seventh_node>
   </Fourth_node>
   </Third_node>
</firstnode>

我需要的:

<firstnode>
  <Second_node>text for second node</Second_node>
   <Third_node>
     <Fourth_node>
       <Fifth_node>text for fifth node</Fifth_node>
       <Sixth_node>text for sixth node</Sixth_node>
        <Seventh_node>text for second node</Seventh_node>
   </Fourth_node>
   </Third_node>
</firstnode>

到目前为止我的 XSLT:

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


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

        <xsl:text>text for second node</xsl:text>
    </xsl:copy>
</xsl:template>

4

3 回答 3

1

您可以尝试将第二个节点中的文本放入变量中,然后使用该变量将该文本进一步放置在第七个节点中。

<xsl:variable name="VAR_SecNode">
   <xsl:value-of select="Second_node"/>
</xsl:variable>

...
<Seventh_node><xsl:value-of select="$VAR_SecNode" /></Seventh_node>
...
于 2013-05-23T14:52:41.347 回答
1

我认为不需要变量。
尝试这个:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
    <xsl:output method="xml" />

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

    <xsl:template match="Seventh_node">
        <xsl:copy>
            <xsl:apply-templates select="@*"/>
            <xsl:value-of select="//Second_node"/>
            <xsl:apply-templates select="node()"/>
        </xsl:copy>
    </xsl:template>

</xsl:stylesheet>

Seventh_node的<xsl:apply-templates select="@*"/>将复制属性。将 <xsl:apply-templates select="node()"/>复制 Seventh_node 的子节点。如果您不需要删除此行。

于 2013-05-23T14:58:20.950 回答
0

您可以将第二个模板更新为以下内容:

<xsl:template match="Seventh_node/text()">
    <xsl:text>text for second node</xsl:text>
</xsl:template>

这将仅匹配您的文本Seventh_node并将其替换为您放入<xsl:text>元素中的任何内容。

于 2013-05-23T14:56:38.390 回答