मै पूछना चाहता हु। स्थिति जोड़ने के लिए सकारात्मक है जो लुकअप टेबल के साथ एक्सएमएल डेटा की जांच करेगा, और अगर हमारे पास लुकअप टेबल में मूल्य नहीं है तो आउटपुट में कॉन्स्ट 8 जोड़ें? एक्सएसएलटी कोड:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:key name="Department" match="Department" use="../Collection"/>
    <xsl:template match="/">
    <document>
        <xsl:apply-templates/>
    </document>
</xsl:template>
 <xsl:template match="line">
     <xsl:variable name="inputDep" select="field[@id='3']"/>
<Department>
    <xsl:for-each select="document('lookup.xml')">
        <xsl:for-each select="key('Deparment',$inputDep)">
            <xsl:value-of select="."/>
        </xsl:for-each>
    </xsl:for-each>
</Department>

 </xsl:template>

</xsl:stylesheet>

खोज तालिका:

<document>
    <line-item>
        <Collection>1</Collection>
        <Department>3</Department>
    </line-item>
    <line-item>
        <Collection>2</Collection>
        <Department>1</Department>
    </line-item>
    <line-item>
        <Collection>3</Collection>
        <Department>2</Department>
    </line-item>
</document>

एक्सएमएल फ़ाइल:

<document>
    <line id="0">
        <field id="3"><![CDATA[1]]></field>
    </line>
    <line id="1">
        <field id="3"/>
    </line>
    <line id="2">
        <field id="3"/><![CDATA[4]]></field>
    </line>
</document>

नतीजा:

<Department>3<Department>
<Department>8<Department>
<Department>8<Department>
0
Petras 1 अगस्त 2011, 19:09
प्रत्येक लूप के लिए आंतरिक क्यों? क्या आप उम्मीद करते हैं कि डिपार्टमेंट (एसआईसी) कुंजी का उपयोग करके लुकअप एक से अधिक नोड लौटाएगा? अगर ऐसा होता है तो क्या आउटपुट सही होगा?
 – 
Jukka Matilainen
1 अगस्त 2011, 19:46

1 उत्तर

सबसे बढ़िया उत्तर

आप एक चर के लिए लुक-अप मान निर्दिष्ट कर सकते हैं और यह चुन सकते हैं कि कुछ भी पाया गया था या नहीं, इसके आधार पर क्या आउटपुट करना है।

2 संपादित करें: एक पूर्ण प्रदर्शन स्टाइलशीट:

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

  <xsl:key name="Department" match="Department" use="../Collection"/>

  <xsl:template match="/">
    <document>
      <xsl:apply-templates/>
    </document>
  </xsl:template>

  <xsl:template match="line">
    <xsl:variable name="inputDep" select="field[@id='3']"/>
    <Department>
      <xsl:for-each select="document('lookup.xml')">
        <xsl:variable name="value" select="key('Department',$inputDep)"/>
        <xsl:choose>
          <xsl:when test="$value">
            <xsl:value-of select="$value"/> <!-- see note -->
          </xsl:when>
          <xsl:otherwise>8</xsl:otherwise>
        </xsl:choose>
      </xsl:for-each>
    </Department>
  </xsl:template>

</xsl:stylesheet>

नोट: मूल स्टाइलशीट में xsl:for-each लूप को एक साधारण xsl:value-of से बदल दिया, यह मानते हुए कि लूपिंग मान जानबूझकर नहीं था। यदि यह वास्तव में था, तो आप इसे प्रत्येक लूप के लिए प्रतिस्थापित कर सकते हैं।

1
Jukka Matilainen 2 अगस्त 2011, 20:23
लुकअप टेबल के लिए प्रत्येक के लिए आंतरिक xml फ़ाइल के लिए नहीं। मैं आपके उत्तर का उपयोग करने का प्रयास करता हूं लेकिन यह काम नहीं करता है .. मैं प्रत्येक लूप के बजाय आपका कोड जोड़ने का प्रयास करता हूं।
 – 
Petras
1 अगस्त 2011, 19:54
@ पेट्रास, मेरे मन में जो कुछ भी था, उसे दर्शाते हुए एक और पूर्ण उदाहरण कोड प्रदान करके मेरे उत्तर को स्पष्ट करने का प्रयास किया।
 – 
Jukka Matilainen
1 अगस्त 2011, 20:13
मैं आपके समाधान की कोशिश करता हूं, सबसे पहले मुझे लाइन पर त्रुटि दिखाएं। मैं चुनिंदा मान को/फ़ील्ड [@ आईडी = 3] में बदलने की कोशिश करता हूं, लेकिन फिर सभी विभाग = 8
 – 
Petras
2 अगस्त 2011, 00:40
@ पेट्रास, आपको क्या त्रुटि संदेश मिलता है? वह हिस्सा सीधे आपके अपने उदाहरण कोड से है।
 – 
Jukka Matilainen
2 अगस्त 2011, 01:07
अज्ञात नामांकित कुंजी। मैंने इस कोड को altova 2011 rel.2 . पर आगे बढ़ाने की कोशिश की
 – 
Petras
2 अगस्त 2011, 10:37