Как сравнить значение двух узлов в XSLT - PullRequest
2 голосов
/ 14 мая 2009

Я новичок в 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 ]

3 голосов
/ 14 мая 2009

Я не знаю, в каком контексте вам нужно сравнивать эти значения, но вам нужен оператор =. Это сравнит их, но, вероятно, не тот контекст, который вам нужен:

<xsl:if 
  test="/G1Export/AgencyGroup/Agency/OrgId = /G1Export/BranchGroup/BranchCode/OrgId">
1 голос
/ 14 мая 2009

Почему бы не сделать AgencyGroup/Agency/OrgId = BranchGroup/BranchCode/OrgId? Для дополнительного анала AgencyGroup/Agency/OrgId/text() = BranchGroup/BranchCode/OrgId/text().

Если вам нужна разница, рассмотрите AgencyGroup/Agency/OrgId - BranchGroup/BranchCode/OrgId

0 голосов
/ 14 мая 2009
//G1Export/compare(AgencyGroup//OrgId, BranchGroup//OrgId)

результат = 0

Отредактировано: В xslt было 2 ошибки 1. Для brnchOrgId вы использовали AgencyGroup вместо BranchGroup 2. Для сравнения () вы должны иметь = 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>

Надеюсь, это поможет.

...