Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [XSLT][XML] Połączenie z dwóch plików
vokiel
post 21.08.2008, 13:54:39
Post #1





Grupa: Zarejestrowani
Postów: 2 592
Pomógł: 445
Dołączył: 12.03.2007

Ostrzeżenie: (0%)
-----


Witam!
Przeszukałem cały dział, ale niestety nie znalazłem sposobu na swój problem.
Mam 2 pliki xml. Przetwarzam pierwszy przy pomocy xslt, przy tym w jednym miejscu pobieram z drugiego wartość jednego znacznika.
Na (uproszczonym) przykładzie:
1.xml
  1. <Products>
  2.      <Product>
  3.            <ProductId>C0010036</ProductId>
  4.            <PartNumber>005940</PartNumber>
  5.            <ProductName><![CDATA[TF1 bateria do tel. Sony-Ericsson K750i/D750i 850mAh Li-Pol V800/K600i/K608i]]></ProductName>
  6.            <ProductDescription><![CDATA[]]></ProductDescription>
  7.            <MajorGroup>TF1</MajorGroup>
  8.            <MinorGroup>ACG</MinorGroup>
  9.            <ProducerId>TELFORCE1</ProducerId>
  10.            <Price>16.3800</Price>
  11.            <PriceVat>19.9836</PriceVat>
  12.            <CurrencyId>PLN</CurrencyId>
  13.            <Available>0</Available>
  14.      </Product>
  15.      <Product>
  16.      [...]
  17.      </Product>
  18. </Products>

2.xml
  1. <HierarchyElement>
  2.      <HID>11311</HID>
  3.      <Name>Notebooki / Laptopy</Name>
  4.      <SortId>1</SortId>
  5.      <ParentHID>11272</ParentHID>
  6.      <ParentName>Komputery </ParentName>
  7.      <ParentSortId>0</ParentSortId>
  8.      <ShowLink>1</ShowLink>
  9.      <MinorGroup>PCN</MinorGroup>
  10. </HierarchyElement>
  11. <HierarchyElement>
  12. [...]
  13. </HierarchyElement>

mam plik xslt:
1.xslt
  1. <xsl:template match="/doc:PriceListProducts">
  2.      <xsl:for-each select="doc:Products/doc:Product">
  3.            <xsl:variable name="my_cat"><xsl:value-of select="doc:MinorGroup"/></xsl:variable>
  4.            <item>
  5.                  <vendor><xsl:value-of select="doc:ProducerId"/></vendor>
  6.                  <compid><xsl:value-of select="doc:ProductId"/></compid>
  7.                  <desc><xsl:value-of select="doc:ProductName"/></desc>
  8.                  <price><xsl:value-of select="doc:PriceVat"/></price>
  9.                  <catid><xsl:value-of select="PriceList/HierarchyElement[MinorGroup=$my_cat]/Name"/></catid>
  10.            </item>
  11.      </xsl:for-each>
  12. </xsl:template>


I teraz pointa:
Problem tkwi w pobraniu nazwy kategorii z drugiego pliku xml.
Do zmiennej my_cat przypisuje kod MinorGroup dla aktualnego węzła, i teraz jak pobrać odpowiadającą mu nazwę z drugiego pliku xml?

Proszę o pomoc


--------------------
Go to the top of the page
+Quote Post
SirZooro
post 23.08.2008, 21:10:09
Post #2





Grupa: Zarejestrowani
Postów: 243
Pomógł: 32
Dołączył: 14.06.2007

Ostrzeżenie: (0%)
-----


Dostęp do innego dokumentu XML zapewnia funkcja document(), czyli musisz użyć czegoś w tym stylu:
  1. <xsl:value-of select="document('2.xml')//MinorGroup[text()=$my_cat]/../Name" />


Zainteresuj się też możliwościami jakie daje funkcja XSLTProcessor::registerPHPFunctions

Ten post edytował SirZooro 23.08.2008, 21:13:05


--------------------
Go to the top of the page
+Quote Post
vokiel
post 25.08.2008, 11:28:17
Post #3





Grupa: Zarejestrowani
Postów: 2 592
Pomógł: 445
Dołączył: 12.03.2007

Ostrzeżenie: (0%)
-----


Niestety pliki są przerabiane w javie sad.gif
Może da się to zrobić używając konstrukcji case tylko nie bardzo wiem jak tu się odwołać do drugiego pliku...


--------------------
Go to the top of the page
+Quote Post
SirZooro
post 25.08.2008, 17:42:44
Post #4





Grupa: Zarejestrowani
Postów: 243
Pomógł: 32
Dołączył: 14.06.2007

Ostrzeżenie: (0%)
-----


W Javie też powinno dać się użyć funkcję document() w XSLT. Przejrzyj wyniki z Googla dla zapytania java xslt - już pierwszy z nich wygląda ciekawie (ten ze strony oreilly). Przejrzałem to pobieżnie i wygląda że powinno się dać to zrobić, jedynie musisz dostarczyć instancję klasy URIResolver.


--------------------
Go to the top of the page
+Quote Post
vokiel
post 3.09.2008, 12:48:15
Post #5





Grupa: Zarejestrowani
Postów: 2 592
Pomógł: 445
Dołączył: 12.03.2007

Ostrzeżenie: (0%)
-----


Ponieważ był spory problem z połączeniem dwóch plików xml w jednym xslt postanowiłem połączyć je w javie, tworząc jeden plik xml. Także plik 1.xml i 2.xml jest teraz jednym plikiem.

Tylko teraz nie wiem jak pobrać tą nazwę kategorii
  1. <xsl:template match="/doc:PriceListProducts">
  2.     <xsl:for-each select="doc:Products/doc:Product">
  3.           <xsl:variable name="my_cat"><xsl:value-of select="doc:MinorGroup"/></xsl:variable>
  4.           <item>
  5.                 <vendor><xsl:value-of select="doc:ProducerId"/></vendor>
  6.                 <compid><xsl:value-of select="doc:ProductId"/></compid>
  7.                 <desc><xsl:value-of select="doc:ProductName"/></desc>
  8.                 <price><xsl:value-of select="doc:PriceVat"/></price>
  9.                 <xsl:template match="/doc:PriceListByTypesCustom">
  10.                                  <xsl:apply-templates select="doc:PriceList/doc:HierarchyElement[MinorGroup=$my_cat]"/>
  11.                                  <categoryId><xsl:value-of  select="doc:Name"/></categoryId>
  12.                 </xsl:template>
  13.           </item>
  14.     </xsl:for-each>
  15. </xsl:template>


to za bardzo nie chce działać sad.gif


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 23.05.2025 - 06:35