Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用XSLT从XML节点检索文本_Xml_Xslt - Fatal编程技术网

使用XSLT从XML节点检索文本

使用XSLT从XML节点检索文本,xml,xslt,Xml,Xslt,如果这似乎是一个非常基本的问题,我很抱歉,但我真的(我的意思是真的)非常感谢能得到的任何帮助。我只是想做以下事情: 1.将自动关闭替换为 2.从“第二个节点”抓取文本 3.将该文本存储在变量中 4.将该文本放入新的“第七个节点”中。 我已经完成了步骤1,但似乎无法从所需元素中检索必要的信息。我在下面介绍了三个示例以及我的XSLT。我想关键问题是存储“Second_node”的文本内容并将其放置在新元素中。通过添加信息,我使用Saxon 6.5进行转换。如果提供的信息不完整,请告诉我 谢谢大家!

如果这似乎是一个非常基本的问题,我很抱歉,但我真的(我的意思是真的)非常感谢能得到的任何帮助。我只是想做以下事情:
1.将自动关闭替换为
2.从“第二个节点”抓取文本
3.将该文本存储在变量中
4.将该文本放入新的“第七个节点”中。

我已经完成了步骤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>

第二个节点的文本

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

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

...
<Seventh_node><xsl:value-of select="$VAR_SecNode" /></Seventh_node>
...

...
...

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

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

第二个节点的文本

这将只匹配
第七个节点的文本
,并将其替换为
元素中的任何内容

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

<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>


将复制第七个节点的属性。
将复制第七个\u节点的子节点。如果您不需要,请删除这行。

我想您希望
在那里……这很有效!我非常感谢你的帮助。真的,谢谢你帮我保住了工作。