Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Templates XSL模板匹配,然后是以下同级上的IF条件_Templates_Xslt_Position_Match - Fatal编程技术网

Templates XSL模板匹配,然后是以下同级上的IF条件

Templates XSL模板匹配,然后是以下同级上的IF条件,templates,xslt,position,match,Templates,Xslt,Position,Match,我有以下问题。我需要知道在x个同名子节点中的任何一个上是否满足条件,并且不处理该行。我正在将一个xml解析为一个文本文件,但它可能有两个或三个相同的子节点,称为具有不同值的same,如果其中一个满足条件,则处理该行 以下是我的XML的一部分: <home> <app> <data> <rec> <rpos>1</rpos>

我有以下问题。我需要知道在x个同名子节点中的任何一个上是否满足条件,并且不处理该行。我正在将一个xml解析为一个文本文件,但它可能有两个或三个相同的子节点,称为具有不同值的same,如果其中一个满足条件,则处理该行

以下是我的XML的一部分:

<home>
    <app>
        <data>
            <rec>
                <rpos>1</rpos>
                <itemdef>
                    <item>HLK-TEST-A</item>
                    <desc>SOMETHING1</desc>
                    <ics>
                        <code>HKU</code>
                        <bpid></bpid>
                        <citem>TEST-A</citem>
                    </ics>  
                    <ics>
                        <code>HLK</code>
                        <bpid></bpid>
                        <citem>TEST-A</citem>
                    </ics>
                </itemdef>
            </rec>
            <rec>
                <rpos>2</rpos>
                <itemdef>
                    <item>HLK-TEST-B</item>
                    <desc>Test</desc>
                    <ics>
                        <code>HKU</code>
                        <bpid></bpid>
                        <citem>TEST-B</citem>
                    </ics>
                </itemdef>
            </rec>
            <rec>
                <rpos>3</rpos>
                <itemdef>
                    <item>HLK-TEST-C</item>
                    <desc>Test3</desc>
                    <ics>
                        <code>HLK</code>
                        <bpid></bpid>
                        <citem>TEST-C</citem>
                    </ics>
                </itemdef>
            </rec>
            <rec>
                <rpos>4</rpos>
                <itemdef>
                    <item>HLK-TEST-D</item>
                    <desc>SOMETHING4</desc>
                    <ics>
                        <code>HLK</code>
                        <bpid></bpid>
                        <citem>TEST-D</citem>
                    </ics>  
                    <ics>
                        <code>HKU</code>
                        <bpid></bpid>
                        <citem>TEST-D</citem>
                    </ics>
                </itemdef>
            </rec>
        </data>
    </app>
</home>
基本上,记录1、3和4必须处理,因为它们有一个值为HLK的“代码”标记

以下是我在XSLT上的内容。。。虽然我只能得到记录1和3。。。你能帮忙吗

XSL:

但应该是:

105604|T|HLK-TEST-A|SOMETHING1|||
105604|T|HLK-TEST-C|Test3|||
105604|T|HLK-TEST-D|SOMETHING4|||

第四个
rec
元素被过滤掉,因为空模板在
rec
元素上匹配,而最后一个
ics
元素不以“HLK”开头。在XML中,第四个
rec
元素的最后一个
ics
元素的值为“HKU”,而不是以“HLK”开头

从示例XML看来,空模板的标准应该是匹配没有以“HLK”开头的
itemdef/ics/code
元素的
rec
元素,而不管
ics
元素的
position()

<xsl:template match="rec[not(itemdef/ics/code[starts-with(.,'HLK')])]" />

非常感谢你!你的第一个建议成功了!我为此工作了两天,却没有意识到我需要的是相反的东西:)谢谢你们!
105604|T|HLK-TEST-A|SOMETHING1|||
105604|T|HLK-TEST-C|Test3|||
105604|T|HLK-TEST-D|SOMETHING4|||
<xsl:template match="rec[not(itemdef/ics/code[starts-with(.,'HLK')])]" />
<xsl:template match="rec" />

<xsl:template match="rec[itemdef/ics/code[starts-with(.,'HLK')]]">
    <xsl:apply-templates select="itemdef"/>
</xsl:template>