2 Stimmen

Wie vergleicht man den Wert von zwei Knoten in XSLT?

Ich bin neu in XSLT. Ich brauche Hilfe, um den Wert von zwei Knoten in XML zu vergleichen.

Mein XML-Beispiel:

<?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>

In der obigen XML-Datei muss ich die Werte der Variablen OrgId Knoten unter dem <AgencyGroup> Knoten zu dem unter dem <BranchGroup> Knoten.

Ich habe versucht, die compare() Methode, aber ich erhalte das Ergebnis von 1. Das tatsächliche Ergebnis muss 0 sein (für gleich). Ich verwende XSLT 2.

3voto

Welbog Punkte 57431

Ich kenne den Kontext nicht, in dem Sie diese Werte vergleichen müssen, aber die = ist der Betreiber, den Sie suchen. Damit werden sie verglichen, aber wahrscheinlich ist das nicht der Kontext, den Sie brauchen:

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

1voto

alamar Punkte 18057

Warum nicht AgencyGroup/Agency/OrgId = BranchGroup/BranchCode/OrgId ? Für extra anal, AgencyGroup/Agency/OrgId/text() = BranchGroup/BranchCode/OrgId/text() .

Wenn Sie einen Unterschied brauchen, sollten Sie AgencyGroup/Agency/OrgId - BranchGroup/BranchCode/OrgId

0voto

SO User Punkte 22342
//G1Export/compare(AgencyGroup//OrgId, BranchGroup//OrgId)

Ergebnis = 0

Bearbeitet: Es gab 2 Fehler in der xslt 1. Für brnchOrgId haben Sie AgencyGroup statt BranchGroup verwendet 2. Für compare() sollte =0 und nicht ='0' stehen.

Korrigierte 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>

Ich hoffe, das hilft.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X