我需要根据输入的xml元素值条件插入新元素。请帮助我。
我需要检查policy / transactionSplitTrans / sourceSystemCd / code ='SCBP',如果为true,则需要在policy \ tag下添加元素underlyingPolicyOperationalDatabaseCd / code。
输入xml:
<?xml version="1.0" encoding="utf-8"?>
<policies>
<policy>
<policyKey>
<policyNbr>004567</policyNbr>
<policyEffectiveDt>2014-11-14</policyEffectiveDt>
<policyID>54545</policyID>
<policyFormCd>
<code>669</code>
</policyFormCd>
</policyKey>
<transactionSplitTrans>
<sourceSystemCd>
<code>SCBP</code>
</sourceSystemCd>
</transactionSplitTrans>
</policy>
</policies>
预期的O / p:
<policies>
<policy>
<policyKey>
<policyNbr>004567</policyNbr>
<policyEffectiveDt>2014-11-14</policyEffectiveDt>
<policyID>54545</policyID>
<policyFormCd>
<code>669</code>
</policyFormCd>
</policyKey>
<transactionSplitTrans>
<sourceSystemCd>
<code>SCBP</code>
</sourceSystemCd>
</transactionSplitTrans>
<underlyingPolicyOperationalDatabaseCd>
<code>SCBP</code>
</underlyingPolicyOperationalDatabaseCd>
</policy>
</policies>
尝试过xslt:
<xsl:stylesheet version="1.0" xsi:schemaLocation="http://www.datapower.com/schemas/json jsonx.xsd"
extension-element-prefixes="dp str xsd xsi ps dpconfig pol"
exclude-result-prefixes="dp dpconfig xsi soap xsd xsi str pol dpconfig xsl a b c d e f g h i j k l m n o p q r s t u v w x y z A B"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:param name="underlyingPolicyOperationalDatabaseCd">underlyingPolicyOperationalDatabaseCd</xsl:param>
<xsl:param name="code">code</xsl:param>
<xsl:template match="@* | node()" name="Copy">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="//policy">
<xsl:call-template name="Copy"/>
<xsl:choose>
<xsl:when test="./transactionSplitTrans/sourceSystemCd[code='SCBP']">
<xsl:element name="{$underlyingPolicyOperationalDatabaseCd}">
<xsl:element name="{$code}">
<xsl:value-of select="'SCBP'" />
</xsl:element>
</xsl:element>
</xsl:when>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
答案 0 :(得分:0)
您只需要一个标识模板,一个匹配目标节点的模板,以及目标节点下的条件,如果条件为真,它将插入其他节点。如:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output omit-xml-declaration="yes"/>
<xsl:strip-space elements="*"/>
<xsl:output indent="yes"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="transactionSplitTrans">
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
<xsl:if test="descendant::code='SCBP' or preceding-sibling::policyKey/policyFormCd/code='UB'">
<underlyingPolicyOperationalDatabaseCd>
<code>SCBP</code>
</underlyingPolicyOperationalDatabaseCd>
</xsl:if>
</xsl:template>
</xsl:stylesheet>