我是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。
答案 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(.) > 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(.) > 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>
希望这有帮助。