Avatar billede hrasbo Praktikant
15. juli 2013 - 14:50 Der er 3 kommentarer og
1 løsning

Søge i andet xml dokument

Hej

Jeg har to xml-filer og et xslt dokument.
Det jeg vil er at jeg fra kalder xslt sammen med product.xml, fra xslt indlæser den så variant.xml som jeg så løber igennem for at finde de forskellige VAR_TEXT udfra min produkt 121212.
Hvis product.xml og xsl virker fint sammen.
Hvis jeg prøver med et test.xsl og variant.xml, så kommer data også ud. Men hvordan kobler jeg variant.xml ind i xsl, så

product.xml
<ELEMENTS>
<PRODUCT>
<GENERAL>
<PROD_NUM>121212</PROD_NUM>
<LANGUAGE_ID>26</LANGUAGE_ID>
<PROD_NAME>Test varer</PROD_NAME>
</GENERAL>
<ADVANCED>
<VENDOR_NUM/
</ADVANCED>
<STOCK>
<STOCK_COUNT>2</STOCK_COUNT>
</STOCK>
</PRODUCT>
</ELEMENTS>

variant.xml

<ELEMENTS>
<VARIANT_GROUP>
<GRP_LANGUAGE_ID>26</GRP_LANGUAGE_ID>
<GRP_NAME>Tov længder</GRP_NAME>
<GRP_FREE_TEXT_VARIANT>False</GRP_FREE_TEXT_VARIANT>
<GRP_SORT>0</GRP_SORT>
<GRP_SELECTED_TEXT>Vælg Længde</GRP_SELECTED_TEXT>
<VARIANTS>
<VARIANT>
<VAR_TEXT>50 cm</VAR_TEXT>
</VARIANT>
<VARIANT>
<VAR_TEXT>75 cm</VAR_TEXT>
</VARIANT>
<VARIANT>
<VAR_TEXT>100 cm</VAR_TEXT
</VARIANT>
</VARIANTS>
<PRODUCTS>
<PRODUCT>
<PROD_NUM>121212</PROD_NUM>
</PRODUCT>
<PRODUCT>
<PROD_NUM>131313</PROD_NUM>
</PRODUCT>
</PRODUCTS>
</VARIANT_GROUP>
</ELEMENTS>

mit xslt dokument:
<xsl:param name="language" select="document('VARIANTS.XML')" />

<xsl:template match="PRODUCT_EXPORT/ELEMENTS">
<products>
<xsl:for-each select="PRODUCT">
<product>

Her vil jeg godt have data fra variant.xml ind, baseret på et PROD_NUM fra product.xml

<xsl:apply-templates select="VARIANT_EXPORT/ELEMENTS" />

</product>
</xsl:for-each>       
</products>
</xsl:template>
   
<xsl:key name="preg" match="PRODUCT" use="PROD_NUM"/>
<xsl:template match="VARIANT_EXPORT/ELEMENTS">
<xsl:for-each select="key('preg','121212')">
<xsl:for-each select="../../VARIANTS/VARIANT">
<variant>
<size><xsl:value-of select="VAR_TEXT"/></size>
</variant>
</xsl:for-each>
</xsl:for-each>
</xsl:template>
Avatar billede jokkejensen Novice
18. juli 2013 - 17:20 #1
Prøv:

<xsl:output method="xml" omit-xml-declaration="yes"/>

  <xsl:variable name="ELEMENTS">
    <ELEMENTS>
      <PRODUCT>
        <GENERAL>
          <PROD_NUM>121212</PROD_NUM>
          <LANGUAGE_ID>26</LANGUAGE_ID>
          <PROD_NAME>Test varer</PROD_NAME>
        </GENERAL>
        <ADVANCED>
          <VENDOR_NUM/>
        </ADVANCED>
        <STOCK>
          <STOCK_COUNT>2</STOCK_COUNT>
        </STOCK>
      </PRODUCT>
    </ELEMENTS>
  </xsl:variable>

  <xsl:variable name="VARIANTS">
    <ELEMENTS>
      <VARIANT_GROUP>
        <GRP_LANGUAGE_ID>26</GRP_LANGUAGE_ID>
        <GRP_NAME>Tov længder</GRP_NAME>
        <GRP_FREE_TEXT_VARIANT>False</GRP_FREE_TEXT_VARIANT>
        <GRP_SORT>0</GRP_SORT>
        <GRP_SELECTED_TEXT>Vælg Længde</GRP_SELECTED_TEXT>
        <VARIANTS>
          <VARIANT>
            <VAR_TEXT>50 cm</VAR_TEXT>
          </VARIANT>
          <VARIANT>
            <VAR_TEXT>75 cm</VAR_TEXT>
          </VARIANT>
          <VARIANT>
            <VAR_TEXT>100 cm</VAR_TEXT>
          </VARIANT>
        </VARIANTS>
        <PRODUCTS>
          <PRODUCT>
            <PROD_NUM>121212</PROD_NUM>
          </PRODUCT>
          <PRODUCT>
            <PROD_NUM>131313</PROD_NUM>
          </PRODUCT>
        </PRODUCTS>
      </VARIANT_GROUP>
    </ELEMENTS>
  </xsl:variable>

  <xsl:template match="/">   
      <xsl:apply-templates select="msxml:node-set($ELEMENTS)//PRODUCT"></xsl:apply-templates>   
  </xsl:template>

  <xsl:template match="PRODUCT">
    <xsl:variable name="produktID" select="GENERAL/PROD_NUM"></xsl:variable>

    <PRODUCT>   
      <xsl:copy-of select="./*"/>
      <xsl:apply-templates select="msxml:node-set($VARIANTS)//VARIANT_GROUP[$produktID = PRODUCTS//PRODUCT/PROD_NUM]"></xsl:apply-templates>
    </PRODUCT>
  </xsl:template>

  <xsl:template match="VARIANT_GROUP">
    <xsl:copy-of select="."/>
  </xsl:template>


vh
Avatar billede hrasbo Praktikant
19. juli 2013 - 14:54 #2
Hej

Når jeg prøver at køre den, kommer der intet ud, bare blank side?
Avatar billede hrasbo Praktikant
22. juli 2013 - 13:50 #3
Jeg skal bruge variablen VAR_TEXT som ligger i VARIANT.XML, flere gange, i det skrevne eksempel er der 3.
Udfra PROD_NUM i product.xml og variant.xml
Avatar billede hrasbo Praktikant
30. juli 2013 - 08:17 #4
Lukker da jeg selv fandt en løsning.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester