我希望在尝试创建的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>
我需要复制 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>
我有以下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 节点中,而不是使用以下每个 SourceText 值作为源对于要复制的内容:
<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>
关于我在做什么错的任何建议?
谢谢!
答案 0 :(得分:1)
只需将XSLT中的第二个模板替换为
<xsl:template match="ResponseArea/TargetText">
<ResponseText>
<xsl:value-of select="../../RequestArea/SourceText"/>
</ResponseText>
</xsl:template>
如果您需要像在所需的示例输出中那样将元素命名为TargetText
而不是ResponseText
,只需对其进行更改。
以上代码的输出为:
<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>