匹配兄弟与某些属性

时间:2016-06-14 10:56:20

标签: xslt xpath

在下面的输入XML中,我想将entryRelationship元素与代码10匹配(或者id,因为这些元素中的任何一个都是唯一的)。

<?xml version="1.0" encoding="UTF-8"?>
<Document>
    <component>
        <section>
            <id test= "1"/>
            <code code="10"/>
            <entry>
                <entryRelationship>
                    <time value="first time"/>                                 
                </entryRelationship>
            </entry>
        </section>

        <section>
            <id test= "2"/>
            <code code="11"/>
            <entry>
                <entryRelationship>
                    <time value="second time"/>                             
                </entryRelationship>                                                                
            </entry>
        </section>
    </component>                        
</Document>

我可以写一个像xsl:template match = "Document/component/section/code[@code = '10']/entry/entryRelationship这样的模板。但问题是,条目不是代码的子代,而是兄弟代码。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:4)

  

问题是,条目不是代码的子代,而是兄弟代码。我该如何解决这个问题?

谓词可以嵌套。

<xsl:template match="section[code[@code=10]]/entry/entryRelationship">

或者,没有嵌套:

<xsl:template match="section[code/@code=10]/entry/entryRelationship">

或者像这样

<xsl:template match="code[@code=10]/../entry/entryRelationship">

或者像这样

<xsl:template match="entryRelationship[../../code/@code=10]">

有很多方法可以表达这一点。

答案 1 :(得分:1)

  

问题是,条目不是代码的子代,而是兄弟代码。我该如何解决这个问题?

条目是带代码的部分的子代:因此尝试:

 <xsl:template 
       match="Document/component/section[code/@code = '10']/entry/entryRelationship" />