xslt选择匹配

时间:2015-11-25 14:27:42

标签: xml xslt

我有以下xml

<?xml version="1.0"?>
<root>
    <element>
        <prop>
            <value>1</value>
        </prop>
        <prop>
            <value>1</value>
        </prop>
        <prop>
            <value>2</value>
        </prop>
    </element>
</root>

如何在匹配中引用任何<prop>元素?

我可以做类似

之类的事情
<xsl:template match="element[prop[3][value != 2]]"/>

但我需要像

这样的东西

<xsl:template match="element[prop[ANY][value != 2]]"/>

UPD

示例:

  <root>
    <Product>
        <somefield>123</somefield>
        <ProductIdentifier>
            <ProductIDType>01</ProductIDType>
            <IDTypeName>Some ID</IDTypeName>
            <IDValue>964067</IDValue>
        </ProductIdentifier>
        <ProductIdentifier>
            <ProductIDType>01</ProductIDType>
            <IDTypeName>Good</IDTypeName>
            <IDValue>25</IDValue>
        </ProductIdentifier>
    </Product>
    <Product>
        <somefield>123</somefield>
        <ProductIdentifier>
            <ProductIDType>01</ProductIDType>
            <IDTypeName>Some ID</IDTypeName>
            <IDValue>964067</IDValue>
        </ProductIdentifier>
        <ProductIdentifier>
            <ProductIDType>01</ProductIDType>
            <IDTypeName>Good</IDTypeName>
            <IDValue>11</IDValue>
        </ProductIdentifier>
    </Product>
    <Product>
        <somefield>123</somefield>
        <ProductIdentifier>
            <ProductIDType>01</ProductIDType>
            <IDTypeName>Some ID</IDTypeName>
            <IDValue>964067</IDValue>
        </ProductIdentifier>
        <ProductIdentifier>
            <ProductIDType>01</ProductIDType>
            <IDTypeName>Good</IDTypeName>
            <IDValue>26</IDValue>
        </ProductIdentifier>
    </Product>
</root>

可以看出,Product中的ProductIdentifier标签很少。我想在IDTypeName = Good

中获得IDValue = 25或IDValue = 26的产品

所以结果xml将是

<root>
    <Product>
        <somefield>123</somefield>
        <ProductIdentifier>
            <ProductIDType>01</ProductIDType>
            <IDTypeName>Some ID</IDTypeName>
            <IDValue>964067</IDValue>
        </ProductIdentifier>
        <ProductIdentifier>
            <ProductIDType>01</ProductIDType>
            <IDTypeName>Good</IDTypeName>
            <IDValue>25</IDValue>
        </ProductIdentifier>
    </Product>
    <Product>
        <somefield>123</somefield>
        <ProductIdentifier>
            <ProductIDType>01</ProductIDType>
            <IDTypeName>Some ID</IDTypeName>
            <IDValue>964067</IDValue>
        </ProductIdentifier>
        <ProductIdentifier>
            <ProductIDType>01</ProductIDType>
            <IDTypeName>Good</IDTypeName>
            <IDValue>26</IDValue>
        </ProductIdentifier>
    </Product>
</root>

1 个答案:

答案 0 :(得分:1)

  

我想获得IDValue = 25或IDValue = 26 in的产品   IDTypeName =好

正如您在your other question中了解到的,最好从 indentity transform 模板开始,并排除满足条件的节点:

XSLT 1.0

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

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

<xsl:template match="Product[not(ProductIdentifier[(IDValue=25 or IDValue=26) and IDTypeName='Good'])]"/>

</xsl:stylesheet>