使用某种选择器或可能的变量将重复模板合并到单个模板中

时间:2017-04-21 18:21:45

标签: templates xslt

如何将四个几乎相同的模板转换为一个?我希望能够有一个变量或至少一个我可以指定父节点组的地方吗?

我试过像

这样的东西
<xsl:template match="ViewSuperbillProcedureScrubFullInsurance|ViewSuperbillScrubFullInsurance|ViewSuperbillProcedureScrub|ViewSuperbillScrub/column/@width[not(../@AutoWidth)]">

<xsl:template match="*[ViewSuperbillProcedureScrubFullInsurance|ViewSuperbillScrubFullInsurance|ViewSuperbillProcedureScrub|ViewSuperbillScrub]/column/@width[not(../@AutoWidth)]">

<xsl:varname name="NodeList">ViewSuperbillProcedureScrubFullInsurance|ViewSuperbillScrubFullInsurance|ViewSuperbillProcedureScrub|ViewSuperbillScrub</xsl:varname>
<xsl:template match="$NodeList/column/@width[not(../@AutoWidth)]">

但没有任何作用。

这是完整的xsl:               

<!-- identity transform -->
<xsl:template match="@*|node()">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
</xsl:template>

<xsl:template match="ViewSuperbillProcedureScrubFullInsurance/column/@width[not(../@AutoWidth)]">
    <xsl:copy/>
    <xsl:attribute name="AutoWidth">false</xsl:attribute>
</xsl:template>
<xsl:template match="ViewSuperbillScrubFullInsurance/column/@width[not(../@AutoWidth)]">
    <xsl:copy/>
    <xsl:attribute name="AutoWidth">false</xsl:attribute>
</xsl:template>
<xsl:template match="ViewSuperbillProcedureScrub/column/@width[not(../@AutoWidth)]">
    <xsl:copy/>
    <xsl:attribute name="AutoWidth">false</xsl:attribute>
</xsl:template>
<xsl:template match="ViewSuperbillScrub/column/@width[not(../@AutoWidth)]">
    <xsl:copy/>
    <xsl:attribute name="AutoWidth">false</xsl:attribute>
</xsl:template>


</xsl:stylesheet>

1 个答案:

答案 0 :(得分:0)

可以做:

<xsl:template match="column[parent::ViewSuperbillScrub or parent::ViewSuperbillProcedureScrub or parent::ViewSuperbillScrubFullInsurance or parent::ViewSuperbillProcedureScrubFullInsurance]/@width[not(../@AutoWidth)]">
    <xsl:copy/>
    <xsl:attribute name="AutoWidth">false</xsl:attribute>
</xsl:template>

但是,只有当您的输入还包含另一个column属性width但父级不同时才有意义:

//SomeOtherNode/column/@width

应该以相同的方式处理