我有以下XML:
我希望 id 成为子名+子名2的串联。示例:对于第一个id,将是:ThinkVision,第二个:LenovoMind
这是通过xsl:for-each吗?
实现的我尝试使用以下xslt:
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="/records/record/customList/customBucket[fn:lower-case(customName)='id']/customValue/text()">
<xsl:for-each select="/records/record/customList">
<xsl:value-of select="concat(customBucket[fn:lower-case(customName)='subname']/customValue/text(),customBucket[fn:lower-case(customName)='subname2']/customValue/text())"/>
</xsl:for-each>
</xsl:template>
但是我得到了每个记录的连接而不是当前的记录:
示例XML:<records>
<record>
<customList>
<customBucket>
<customName>id</customName>
<customValue>default</customValue>
</customBucket>
<customBucket>
<customName>subname</customName>
<customValue>Think</customValue>
</customBucket>
<customBucket>
<customName>subname2</customName>
<customValue>Vision</customValue>
</customBucket>
</customList>
</record>
<record>
<customList>
<customBucket>
<customName>id</customName>
<customValue>default</customValue>
</customBucket>
<customBucket>
<customName>subname</customName>
<customValue>Lenovo</customValue>
</customBucket>
<customBucket>
<customName>subname2</customName>
<customValue>Mind</customValue>
</customBucket>
</customList>
</record>
<record>
<customList>
<customBucket>
<customName>id</customName>
<customValue>default</customValue>
</customBucket>
<customBucket>
<customName>subname</customName>
<customValue>Think</customValue>
</customBucket>
<customBucket>
<customName>subname2</customName>
<customValue>Vision</customValue>
</customBucket>
</customList>
</record>
<record>
<customList>
<customBucket>
<customName>id</customName>
<customValue>default</customValue>
</customBucket>
<customBucket>
<customName>subname</customName>
<customValue>Mapped</customValue>
</customBucket>
<customBucket>
<customName>subname2</customName>
<customValue>Safe</customValue>
</customBucket>
</customList>
</record>
<record>
<customList>
<customBucket>
<customName>id</customName>
<customValue>default</customValue>
</customBucket>
<customBucket>
<customName>subname</customName>
<customValue>Sony</customValue>
</customBucket>
<customBucket>
<customName>subname2</customName>
<customValue>DCO</customValue>
</customBucket>
</customList>
</record>
</records>
预期产出
<?xml version="1.0" encoding="UTF-8"?>
<records>
<record>
<customList>
<customBucket>
<customName>id</customName>
<customValue>ThinkVision</customValue>
</customBucket>
<customBucket>
<customName>subname</customName>
<customValue>Think</customValue>
</customBucket>
<customBucket>
<customName>subname2</customName>
<customValue>Vision</customValue>
</customBucket>
</customList>
</record>
<record>
<customList>
<customBucket>
<customName>id</customName>
<customValue>LenovoMind</customValue>
</customBucket>
<customBucket>
<customName>subname</customName>
<customValue>Lenovo</customValue>
</customBucket>
<customBucket>
<customName>subname2</customName>
<customValue>Mind</customValue>
</customBucket>
</customList>
</record>
</records>
==
情景#2
INPUT:
<records>
<record>
<customList>
<customBucket>
<customName>id</customName>
<customValue>default</customValue>
</customBucket>
<customBucket>
<customName>subname</customName>
<customValue>Think</customValue>
</customBucket>
<customBucket>
<customName>subname2</customName>
<customValue>Vision</customValue>
</customBucket>
</customList>
</record>
<record>
<customList>
<customBucket>
<customName>id</customName>
<customValue>default</customValue>
</customBucket>
<customBucket>
<customName>subname</customName>
<customValue>Lenovo</customValue>
</customBucket>
<customBucket>
<customName>subname2</customName>
<customValue>Mind</customValue>
</customBucket>
</customList>
</record>
<record>
<customList>
<customBucket>
<customName>id</customName>
<customValue>default</customValue>
</customBucket>
<customBucket>
<customName>subname</customName>
<customValue>Think</customValue>
</customBucket>
<customBucket>
<customName>subname2</customName>
<customValue>Vision</customValue>
</customBucket>
</customList>
</record>
<record>
<customList>
<customBucket>
<customName>id</customName>
<customValue>default</customValue>
</customBucket>
<customBucket>
<customName>subname</customName>
<customValue>Mapped</customValue>
</customBucket>
<customBucket>
<customName>subname2</customName>
<customValue>Safe</customValue>
</customBucket>
</customList>
</record>
<record>
<customList>
<customBucket>
<customName>id</customName>
<customValue>default</customValue>
</customBucket>
<customBucket>
<customName>subname</customName>
<customValue>Sony</customValue>
</customBucket>
<customBucket>
<customName>subname2</customName>
<customValue>DCO</customValue>
</customBucket>
</customList>
</record>
</records>
预期输出
<records>
<record>
<customList>
<customBucket>
<customName>id</customName>
<customValue>default</customValue>
</customBucket>
<customBucket>
<customName>newid</customName>
<customValue>ThinkVision</customValue>
</customBucket>
<customBucket>
<customName>subname</customName>
<customValue>Think</customValue>
</customBucket>
<customBucket>
<customName>subname2</customName>
<customValue>Vision</customValue>
</customBucket>
</customList>
</record>
<record>
<customList>
<customBucket>
<customName>id</customName>
<customValue>default</customValue>
</customBucket>
<customBucket>
<customName>newid</customName>
<customValue>LenovoMind</customValue>
</customBucket>
<customBucket>
<customName>subname</customName>
<customValue>Lenovo</customValue>
</customBucket>
<customBucket>
<customName>subname2</customName>
<customValue>Mind</customValue>
</customBucket>
</customList>
</record>
<record>
<customList>
<customBucket>
<customName>id</customName>
<customValue>default</customValue>
</customBucket>
<customBucket>
<customName>newid</customName>
<customValue>ThinkVision</customValue>
</customBucket>
<customBucket>
<customName>subname</customName>
<customValue>Think</customValue>
</customBucket>
<customBucket>
<customName>subname2</customName>
<customValue>Vision</customValue>
</customBucket>
</customList>
</record>
<record>
<customList>
<customBucket>
<customName>id</customName>
<customValue>default</customValue>
</customBucket>
<customBucket>
<customName>newid</customName>
<customValue>MappedSafe</customValue>
</customBucket>
<customBucket>
<customName>subname</customName>
<customValue>Mapped</customValue>
</customBucket>
<customBucket>
<customName>subname2</customName>
<customValue>Safe</customValue>
</customBucket>
</customList>
</record>
<record>
<customList>
<customBucket>
<customName>id</customName>
<customValue>default</customValue>
</customBucket>
<customBucket>
<customName>newid</customName>
<customValue>SonyDCO</customValue>
</customBucket>
<customBucket>
<customName>subname</customName>
<customValue>Sony</customValue>
</customBucket>
<customBucket>
<customName>subname2</customName>
<customValue>DCO</customValue>
</customBucket>
</customList>
</record>
</records>
基本上没有覆盖'id',这里的想法是创建一个名为'newid'的新节点,其逻辑与方案1相同:子名+子名2的连接。
SCENARIO 2.1
预期输出(与方案2相同,但重命名了原始ID)
我添加了以下代码,但它没有重命名id。
<xsl:param name="normRenamedID" select="'id_renamed'"/>
<!-- Rename clientPortfolioID to RM_clientPortfolioID-->
<xsl:template match="/customBucket[fn:lower-case(customName)='clientportfolioid']/customName/text()">
<xsl:value-of select="$normRenamedID"/>
</xsl:template>
<records>
<record>
<customList>
<customBucket>
<customName>id_renamed</customName>
<customValue>default</customValue>
</customBucket>
<customBucket>
<customName>newid</customName>
<customValue>ThinkVision</customValue>
</customBucket>
<customBucket>
<customName>subname</customName>
<customValue>Think</customValue>
</customBucket>
<customBucket>
<customName>subname2</customName>
<customValue>Vision</customValue>
</customBucket>
</customList>
</record>
<record>
<customList>
<customBucket>
<customName>id_renamed</customName>
<customValue>default</customValue>
</customBucket>
<customBucket>
<customName>newid</customName>
<customValue>LenovoMind</customValue>
</customBucket>
<customBucket>
<customName>subname</customName>
<customValue>Lenovo</customValue>
</customBucket>
<customBucket>
<customName>subname2</customName>
<customValue>Mind</customValue>
</customBucket>
</customList>
</record>
<record>
<customList>
<customBucket>
<customName>id_renamed</customName>
<customValue>default</customValue>
</customBucket>
<customBucket>
<customName>newid</customName>
<customValue>ThinkVision</customValue>
</customBucket>
<customBucket>
<customName>subname</customName>
<customValue>Think</customValue>
</customBucket>
<customBucket>
<customName>subname2</customName>
<customValue>Vision</customValue>
</customBucket>
</customList>
</record>
<record>
<customList>
<customBucket>
<customName>id_renamed</customName>
<customValue>default</customValue>
</customBucket>
<customBucket>
<customName>newid</customName>
<customValue>MappedSafe</customValue>
</customBucket>
<customBucket>
<customName>subname</customName>
<customValue>Mapped</customValue>
</customBucket>
<customBucket>
<customName>subname2</customName>
<customValue>Safe</customValue>
</customBucket>
</customList>
</record>
<record>
<customList>
<customBucket>
<customName>id_renamed</customName>
<customValue>default</customValue>
</customBucket>
<customBucket>
<customName>newid</customName>
<customValue>SonyDCO</customValue>
</customBucket>
<customBucket>
<customName>subname</customName>
<customValue>Sony</customValue>
</customBucket>
<customBucket>
<customName>subname2</customName>
<customValue>DCO</customValue>
</customBucket>
</customList>
</record>
</records>
答案 0 :(得分:2)
当你这样做时:
customList
您从/
根节点开始选择所有 <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"/>
<xsl:strip-space elements="*"/>
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="customBucket[customName='id']/customValue">
<xsl:copy>
<xsl:value-of select="../../customBucket[customName='subname']/customValue" />
<xsl:value-of select="../../customBucket[customName='subname2']/customValue" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
元素。您当前的上下文在此处不起作用。
要获得您正在寻找的结果,请尝试以下方法:
<xsl:template match="customBucket[customName='id']">
<xsl:copy-of select="."/>
<customBucket>
<customName>newid</customName>
<customValue>
<xsl:value-of select="../customBucket[customName='subname']/customValue" />
<xsl:value-of select="../customBucket[customName='subname2']/customValue" />
</customValue>
</customBucket>
</xsl:template>
对于您添加的方案,请将第二个模板更改为:
<xsl:template match="customBucket[customName='id']">
<xsl:copy>
<customName>
<xsl:value-of select="$normRenamedID" />
</customName>
<xsl:apply-templates select="customValue"/>
</xsl:copy>
<customBucket>
<customName>newid</customName>
<customValue>
<xsl:value-of select="../customBucket[customName='subname']/customValue" />
<xsl:value-of select="../customBucket[customName='subname2']/customValue" />
</customValue>
</customBucket>
</xsl:template>
对于其他方案,请将第二个模板更改为:
[(Libri,50.0),(Proxis,20.0),(Proxis,45.0),(Amazon,45.0)]