如何比较XSLT中两个节点的值

时间:2009-05-14 11:47:15

标签: xslt xslt-2.0

我是XSLT的新手。我需要帮助比较XML中两个节点值的值。

我的示例XML:

<?xml version="1.0" encoding="utf-8"?>
<G1Export xmlns="">
    <AgencyGroup xmlns="">
        <Agency xmlns="">
            <RecordType xmlns="">RecordType</RecordType>
            <OrgId xmlns="">123</OrgId>
        </Agency>
    </AgencyGroup>
    <BranchGroup xmlns="">
        <BranchCode xmlns="">
            <OrgId xmlns="">123</OrgId>
        </BranchCode>
    </BranchGroup>
</G1Export>

在上面的XML文件中,我需要将OrgId节点下的<AgencyGroup>节点的值与<BranchGroup>节点下的节点进行比较。

我尝试使用compare()方法,但它给了我1的结果。 实际结果必须为0(相等)。我正在使用XSLT 2。

3 个答案:

答案 0 :(得分:3)

我不知道您需要比较这些值的上下文,但=运算符正是您要查找的。这将比较它们,但可能不是您需要的上下文:

<xsl:if 
  test="/G1Export/AgencyGroup/Agency/OrgId = /G1Export/BranchGroup/BranchCode/OrgId">

答案 1 :(得分:1)

为什么不AgencyGroup/Agency/OrgId = BranchGroup/BranchCode/OrgId? 对于额外的肛门,AgencyGroup/Agency/OrgId/text() = BranchGroup/BranchCode/OrgId/text()

如果您需要差异,请考虑AgencyGroup/Agency/OrgId - BranchGroup/BranchCode/OrgId

答案 2 :(得分:0)

//G1Export/compare(AgencyGroup//OrgId, BranchGroup//OrgId)

result = 0

编辑: xslt中有2个错误 1.对于brnchOrgId,您使用的是AgencyGroup而不是BranchGroup 2.对于compare(),你应该有= 0而不是='0'

更正了xslt:

<xsl:template match="/">
        <xsl:element name="PICRESPONSE" namespace="fieldpoint.com/namespaces">
            <xsl:for-each select="//G1Export/AgencyGroup">
                <xsl:if test="count(.) &gt; 0">
                    <!--org_id variable-->
                    <xsl:variable name="orgId" select="string(/G1Export/AgencyGroup/Agency/OrgId)"/>
                    <xsl:element name="EXPORTRESPONSE" namespace="fieldpoint.com/namespaces">; <xsl:for-each select="//G1Export/BranchGroup">
                            <xsl:if test="count(.) &gt; 0">
                                <xsl:variable name="brnchOrgId" select="string(/G1Export/BranchGroup/BranchCode/OrgId)"/>                               
                                <!--Put the Branch information inside the current agency node only if branch belong to current Agency-->
                                <xsl:if test="compare($brnchOrgId,$orgId)=0">asda
                                    <xsl:value-of select="'orgid is same as branchogid'"/>
                                </xsl:if>
                            </xsl:if>
                        </xsl:for-each>
                    </xsl:element>
                </xsl:if>
            </xsl:for-each>
        </xsl:element>
    </xsl:template>

输出:

<?xml version="1.0" encoding="UTF-8"?>
<PICRESPONSE xmlns="fieldpoint.com/namespaces">
    <EXPORTRESPONSE>; orgid is same as branchogid</EXPORTRESPONSE>
</PICRESPONSE>

希望这有帮助。