如何匹配XSLT中查找表中具有键的所有节点

时间:2012-03-30 04:12:14

标签: xslt xpath

给定输入XML文件:

        <acctInfo>
                <wfInfo>
                    <aaa>1</aaa>
                    <bbb>1</bbb>
                    <ccc>1</ccc>
                    <ddd>1</ddd>
                    <eee>1</eee>
                </wfInfo>
            <acctInfo>

查找文件:

<fields>
    <field>
       <name>aaa</name>
       <Updatekey>aaakey</Updatekey>
    </field>

    <field>
       <name>bbb</name>
       <Updatekey>bbbkey</Updatekey>
    </field>

    <field>
       <name>ccc</name>
       <Updatekey>ccckey</Updatekey>
    </field>
</fields>

我想使用XSLT / XPATH来计算输入xml文件中查找表中具有相应键的所有节点。在上面的例子中,count应该给3.谢谢。

3 个答案:

答案 0 :(得分:1)

您可以使用文档命令在XSLT中引用另一个xml文档。

<xsl:value-of 
   select="count(//wfInfo/*[document('Lookup.xml')//field/name = local-name()])" />

即。匹配 wfInfo 下的所有元素,其中lookup.xml中有一个与该元素同名的字段名称。

因此,给出以下XSLT

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
   <xsl:template match="/"> 
      <xsl:value-of 
         select="count(//wfInfo/*[document('Lookup.xml')//field/name = local-name()])" />
   </xsl:template> 
</xsl:stylesheet> 

输出 3

答案 1 :(得分:0)

此转化

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="text"/>

 <xsl:template match="/">
     <xsl:value-of select=
     "count(/*/*/*
             [name()
             =
              document('file:///c:/temp/delete/lookup.xml')/*/*/name]
            )"/>
 </xsl:template>
</xsl:stylesheet>

应用于提供的XML文档(更正为格式良好):

<acctInfo>
    <wfInfo>
        <aaa>1</aaa>
        <bbb>1</bbb>
        <ccc>1</ccc>
        <ddd>1</ddd>
        <eee>1</eee>
    </wfInfo>
</acctInfo>

生成想要的正确结果

3

答案 2 :(得分:-1)

尝试这种方法:

            ┌─────────┐
            │Meta XSLT│
┌──────────┐└────┬────┘┌──────────┐
│Lookup XML├─────┴────>┤Inner XSLT│
└──────────┘┌─────────┐└────┬─────┘┌──────────┐
            │Input XML├─────┴─────>┤  Output  │
            └─────────┘            └──────────┘

使用以Meta XSLT为输入的Lookup XML,生成Intermedia XSLT来处理输出

相关问题