xslt通过另一个元素值获取父元素

时间:2015-09-16 14:37:22

标签: xml xslt

我试图根据子元素值

获取父节点

我想做类似获取TransactionDetail元素的地方,其中SequenceNumber = 2

我试着这样做,但我错过了一些东西......

 ancestor:://*[local-name()='SequenceNumber'][text()=2]

 //TransactionDetail[//SequenceNumber = 2]

这是xml

<Root>
<biztalk_1>

    <body>
        <ActiveStore_SalesTransaction_1.70>

            <TransactionDetail>
                <SequenceNumber>2</SequenceNumber>

                <TransactionDetailGroup>
                    <Item>
                        <ItemID>22</ItemID>

                        <NonMerchandiseFlag>1</NonMerchandiseFlag>
                    </Item>
                </TransactionDetailGroup>
            </TransactionDetail>




        </ActiveStore_SalesTransaction_1.70>
    </body>
</biztalk_1>

2 个答案:

答案 0 :(得分:1)

试试这个:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="Root">
    <Root>
        <xsl:copy-of select="descendant::*[name()='TransactionDetail']
                                                        [descendant::*[name()='SequenceNumber']='2']"/>
    </Root>
</xsl:template>

</xsl:stylesheet>

答案 1 :(得分:1)

使用name()不是一个好习惯。而是使用xpath中的元素名称,如下所示:

//TransactionDetail[SequenceNumber = 2]

xpath会在整个文档中选择所有TransactionDetail元素,其子元素SequenceNumber的值为2

如果您希望TransactionDetail与任何后代SequenceNumber2,请使用:

//TransactionDetail[.//SequenceNumber = 2]

此处,.//SequenceNumber确保仅检查当前TransactionDetail的后代SequenceNumber元素。