XSLT用于处理特定的节点组

时间:2015-04-27 06:15:03

标签: xml xslt xpath

我想要一个XPath,它将考虑一个特定的组并忽略所有其他组。以下是我的XML代码:

    <GetBillList>
    <Case>
    <CaseID>...</CaseID> 
    <BillGroup>
    <BillGroupID>...</BillGroupID> 
    </BillGroup>
    </Case>
    <StartDate>2014-01-01</StartDate>
    <GetBillListResponse>
    <Bill>
    <BillStatusCode>
    <BillStatusCode>type description</BillStatusCode>
    <typecode>1</typecode>
    </BillStatusCode>
    <EBillProcessStatusCode>
    <EBillProcessStatusCode>type description</EBillProcessStatusCode>
    <typecode>2</typecode>
    </EBillProcessStatusCode>
    <ToDate>...</ToDate>
    </Bill>
    </GetBillListResponse>
    </GetBillList>

XSLT代码:

     <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="*"/>

    <xsl:template match="*">
    <xsl:copy>
    <xsl:for-each select="id | typecode">
    <xsl:attribute name="{name()}">
    <xsl:value-of select="."/>
    </xsl:attribute>
    </xsl:for-each>
    <xsl:apply-templates select="node()[not(self::id or self::typecode)]"/>
    </xsl:copy>
    </xsl:template>

    <xsl:template match="*[name(.) = name(..)]">
    <xsl:apply-templates/>
    </xsl:template>
    </xsl:stylesheet>

我想让它在“GetBillListResponse”上工作,只忽略“Case”组&amp; “StartDate”元素。

期望的输出:

    <GetBillList>
    <GetBillListResponse>
    <Bill>
    <BillStatusCode typecode="1">type description</BillStatusCode>
    <EBillProcessStatusCode typecode="2">type description</EBillProcessStatusCode>
    <ToDate>...</ToDate>
    </Bill>
    </GetBillListResponse>
    </GetBillList>

会对此提出任何帮助!

1 个答案:

答案 0 :(得分:0)

如果我将我的答案基于您当前的输入和XSLT,只需添加:

<xsl:template match="Case|StartDate"/>

在样式表中。

修改

如果你想在你喜欢的节点上工作,请改为:

<xsl:template match="/">
    <GetBillList>
        <xsl:apply-templates select="GetBillList/GetBillListResponse"/>
    </GetBillList>
</xsl:template>