Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.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 XPATH从前面的元素复制节点值_Xslt_Xpath - Fatal编程技术网

Xslt XPATH从前面的元素复制节点值

Xslt XPATH从前面的元素复制节点值,xslt,xpath,Xslt,Xpath,我希望在我试图创建的XPATH上得到帮助 我有以下XML文件结构: <Request> <RequestArea> <SourceText>**Text 1**</SourceText> </RequestArea> <ResponseArea> <TargetText></TargetText> </ResponseArea>

我希望在我试图创建的XPATH上得到帮助

我有以下XML文件结构:

<Request>
    <RequestArea>
        <SourceText>**Text 1**</SourceText>
    </RequestArea>
    <ResponseArea>
        <TargetText></TargetText>
    </ResponseArea>
</Request>
<Request>
    <RequestArea>
        <SourceText>**Text 2**</SourceText>
    </RequestArea>
    <ResponseArea>
        <TargetText></TargetText>
    </ResponseArea>
</Request>

**文本1**
**文本2**
我需要复制SourceText节点的值,并将其粘贴到以下TargetText节点中

因此,生成的XML文件如下所示:

<Request>
    <RequestArea>
        <SourceText>**Text 1**</SourceText>
    </RequestArea>
    <ResponseArea>
        <TargetText>**Text 1**</TargetText>
    </ResponseArea>
</Request>
<Request>
    <RequestArea>
        <SourceText>**Text 2**</SourceText>
    </RequestArea>
    <ResponseArea>
        <TargetText>**Text 2**</TargetText>
    </ResponseArea>
</Request>

**文本1**
**文本1**
**文本2**
**文本2**
我有以下XSL:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

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


<xsl:template match="TargetText">
    <ResponseText>
        <xsl:value-of select="preceding::SourceText"/>
    </ResponseText>
</xsl:template>


</xsl:stylesheet>

但是XSL引擎(MSXSL)将文本1值复制到两个后续的TargetText节点中,而不是使用以下每个源文本值作为被复制内容的源:

<Request>
    <RequestArea>
        <SourceText>**Text 1**</SourceText>
    </RequestArea>
    <ResponseArea>
        <TargetText>**Text 1**</TargetText>
    </ResponseArea>
</Request>
<Request>
    <RequestArea>
        <SourceText>**Text 2**</SourceText>
    </RequestArea>
    <ResponseArea>
        <TargetText>**Text 1**</TargetText>
    </ResponseArea>
</Request>

**文本1**
**文本1**
**文本2**
**文本1**
对我做错了什么有什么建议吗


谢谢大家!

只需将XSLT中的第二个模板替换为

<xsl:template match="ResponseArea/TargetText">
    <ResponseText>
        <xsl:value-of select="../../RequestArea/SourceText"/>
    </ResponseText>
</xsl:template>
<Request>
    <RequestArea>
        <SourceText>**Text 1**</SourceText>
    </RequestArea>
    <ResponseArea>
        <ResponseText>**Text 1**</ResponseText>
    </ResponseArea>
</Request>
<Request>
    <RequestArea>
        <SourceText>**Text 2**</SourceText>
    </RequestArea>
    <ResponseArea>
        <ResponseText>**Text 2**</ResponseText>
    </ResponseArea>
</Request>