这是我之前的问题的继续(很抱歉再次发布类似的问题):
Merge functionality of two xsl files into a single file (not a xsl import or include issue)
和
Merge functionality of two xsl files into a single file (continued.....)
这实际上是对我的第二个问题的一点操纵。 我现在需要将 Flack 提供的解决方案与我的xsl中的“选择”条件合并到我的第一个问题中:
<xsl:choose>
<xsl:when test='/Declaration/Header/DeclarantsReference = ""'>
<DeclarantsReference>
<xsl:text disable-output-escaping="no">A</xsl:text>
</DeclarantsReference>
</xsl:when>
<xsl:otherwise>
<DeclarantsReference>
<xsl:value-of select="/Declaration/Header/DeclarantsReference"/>
</DeclarantsReference>
</xsl:otherwise>
</xsl:choose>
现在任何样本xml输入如:
<Declaration>
<Message>
<Meduim>#+#</Meduim>
<CommonAccessReference></CommonAccessReference>
</Message>
<BeginingOfMessage>
<MessageCode>5</MessageCode>
<DeclarationCurrency></DeclarationCurrency>
<MessageFunction>ISD</MessageFunction>
</BeginingOfMessage>
<Header>
<DeclarantsReference></DeclarantsReference>
<Items>
<Documents>
<ItemDocument>
<DocumentCode>XXX</DocumentCode>
<DocumentPart></DocumentPart>
<DocumentLanguage>#+#</DocumentLanguage>
</ItemDocument>
</Documents>
</Items>
</Header>
</Declaration>
应输出:
<Declaration>
<Message>
<Meduim></Meduim>
</Message>
<BeginingOfMessage>
<MessageCode>5</MessageCode>
<MessageFunction>ISD</MessageFunction>
</BeginingOfMessage>
<Header>
<DeclarantsReference>A</DeclarantsReference>
<Items>
<Documents>
<ItemDocument>
<DocumentCode>XXX</DocumentCode>
<DocumentLanguage></DocumentLanguage>
</ItemDocument>
</Documents>
</Items>
</Header>
</Declaration>
感谢您提前提供任何帮助。
答案 0 :(得分:0)
此样式表:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="*[not(node())]"/>
<xsl:template match="text()" name="strip">
<xsl:param name="pString" select="."/>
<xsl:param name="pOutput" select="substring-before($pString,'#+#')"/>
<xsl:choose>
<xsl:when test="contains($pString,'#+#')">
<xsl:call-template name="strip">
<xsl:with-param name="pString"
select="substring-after($pString,'#+#')"/>
<xsl:with-param name="pOutput"
select="concat($pOutput,
substring-before($pString,
'#+#'))"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="concat($pOutput,$pString)"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="DeclarantsReference[not(node())]"
priority="1">
<xsl:copy>A</xsl:copy>
</xsl:template>
</xsl:stylesheet>
输出:
<Declaration>
<Message>
<Meduim></Meduim>
</Message>
<BeginingOfMessage>
<MessageCode>5</MessageCode>
<MessageFunction>ISD</MessageFunction>
</BeginingOfMessage>
<Header>
<DeclarantsReference>A</DeclarantsReference>
<Items>
<Documents>
<ItemDocument>
<DocumentCode>XXX</DocumentCode>
<DocumentLanguage></DocumentLanguage>
</ItemDocument>
</Documents>
</Items>
</Header>
</Declaration>
注意:规则会覆盖身份规则。