<module>
<component>
<section>
<ptemplateId root="1.8"/>
<entry>
<observation>
<templateId root="1.24"/>
</observation>
</entry>
</section>
</component>
<component>
<section>
<ptemplateId root="1.10"/>
<entry>
<observation>
<templateId root="1.24"/>
</observation>
</entry>
</section>
</component>
<component>
<section>
<ptemplateId root="1.23"/>
<entry>
<observation>
<templateId root="1.24"/>
</observation>
<entryRelation>
<observation>
<templateId root="1.24"/>
</observation>
</entryRelation>
</entry>
</section>
</component>
<component>
<section>
<ptemplateId root="1.8"/>
<entry>
<observation>
<templateId root="1.24"/>
</observation>
<entryRelation>
<observation>
<templateId root="1.28"/>
</observation>
</entryRelation>
</entry>
</section>
</component>
</module>
我想在基于ptemplateId的模板中选择观察,我能知道匹配表达式吗?
<xsl:template match"******">
<!-- some processing goes here to process
observation if ptemplateId is 1.8... -->
</xsl:template>
<xsl:template match"******">
<!-- some processing goes here to process
observation if ptemplateId is other than 1.8... -->
</xsl:template>
there can be nested observation's also. (i am looking for a match expression with axis expressions to make it more generic)
答案 0 :(得分:6)
试试这个:
/module/component/section[ptemplateId/@root='1.23']//observation
当然,用你想要的ptemplateId / @ root值代替'1.23'。这应该涵盖嵌套的观察,只要它们出现在包含ptemplateId的部分的子节点。
您可以在我的在线xpath测试器here尝试此操作。
这对你有用吗?
修改:您也可以考虑使用此变体,以便放入<xsl:template match="..." />
。
<xsl:template match="observation[ancestor::section/ptemplateId/@root = '1.23']"/>
答案 1 :(得分:2)
我现在无法对此进行测试,而且自从我做了xpath以来它一直是一个小问题,但我认为以下内容应该有效。它将树向下导航到包含root属性的节点,其值等于1.23,然后使用..表示parrent。
//module/component/section/ptemplateId[@root='1.23']/..
答案 2 :(得分:0)
另一种方法是使用XSL密钥:
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>
<!-- the key indexes all <observation> elements by their ptemplateId -->
<xsl:key
name="kObservation"
match="observation"
use="ancestor::section[1]/ptemplateId/@root"
/>
<xsl:template match="/">
<!-- you can then select all the matching elements directly -->
<xsl:apply-templates select="key('kObservation', '1.8')" />
</xsl:template>
<xsl:template match="observation">
<!-- (whatever) -->
<xsl:copy-of select="." />
</xsl:template>
</xsl:stylesheet>
以上产量:
<observation>
<templateId root="1.24" />
</observation>
<observation>
<templateId root="1.24" />
</observation>
<observation>
<templateId root="1.28" />
</observation>