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