在下面的XSLT中,我正在检查以下内容
1正在运行,但是2不是。
对于2我尝试了两件事:
首先,使用xsl:if
条件不起作用。
它正在添加具有相同节点名称的新节点,而不是向属性插入值。
其次我试图使用模板。那也行不通。 它完全消除了节点并使用值将属性添加到父节点。
此外,是否可以采用不同的方式或更好的方式。
XSLT
<xsl:template match="//ns0:Cedent/ns0:Party/ns0:Id">
<xsl:if test="//ns0:Cedent/ns0:Party/ns0:Id = ''">
<xsl:copy>
<xsl:value-of select="//ns0:Broker/ns0:Party/ns0:Id"/>
</xsl:copy>
</xsl:if>
<!--<xsl:if test="//ns0:Cedent/ns0:Party/ns0:Id[@Agency = '']">
<xsl:copy>
<xsl:attribute name="Agency">Legacy</xsl:attribute>
<xsl:value-of select="'Legacy'"/>
</xsl:copy>
</xsl:if>-->
</xsl:template>
<xsl:template match="//ns0:Cedent/ns0:Party/ns0:Id[@Agency = '']">
<xsl:attribute name="Agency">Legacy</xsl:attribute>
</xsl:template>
输入
<ns0:Testing>
<ns0:Cedent>
<ns0:Party>
<ns0:Id Agency=""></ns0:Id>
<ns0:Name>Canada</ns0:Name>
</ns0:Party>
</ns0:Cedent>
<ns0:Broker>
<ns0:Party>
<ns0:Id Agency="Legacy">292320710</ns0:Id>
<ns0:Name>Spain</ns0:Name>
</ns0:Party>
</ns0:Broker>
</ns0:Testing>
输出
<ns0:Testing>
<ns0:Cedent>
<ns0:Party>
<ns0:Id Agency="Legacy">292320710</ns0:Id>
<ns0:Name>Canada</ns0:Name>
</ns0:Party>
</ns0:Cedent>
</ns0:Testing>
答案 0 :(得分:1)
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ns0="some_namespace_uri"
>
<xsl:output indent="yes" />
<xsl:template match="node() | @*">
<xsl:copy>
<xsl:apply-templates select="node() | @*" />
</xsl:copy>
</xsl:template>
<xsl:template match="ns0:Cedent/ns0:Party/ns0:Id[. = '']">
<xsl:copy>
<xsl:apply-templates select="@*" />
<xsl:apply-templates select="
../../following-sibling::ns0:Broker[1]/ns0:Party/ns0:Id/node()
" />
</xsl:copy>
</xsl:template>
<xsl:template match="ns0:Cedent/ns0:Party/ns0:Id/@Agency[. = '']">
<xsl:attribute name="Agency">Legacy</xsl:attribute>
</xsl:template>
</xsl:stylesheet>
给你
<Testing xmlns="some_namespace_uri">
<Cedent>
<Party>
<Id Agency="Legacy">292320710</Id>
<Name>Canada</Name>
</Party>
</Cedent>
<Broker>
<Party>
<Id Agency="Legacy">292320710</Id>
<Name>Spain</Name>
</Party>
</Broker>
</Testing>
注意:
如果您根本不想要输出中的<Broker>
元素,请添加一个空模板:
<xsl:template match="ns0:Broker" />
模板中的匹配表达式不需要从根节点开始。