2017-11-13 5 views
-1

원본 XML에서 요소를 복사하고 최종 XML을 생성하고 생성하는 두 xml의 요소를 대체하는 xsl 변환이 있습니다. 그것은 작동하지만, 요소가 복사 요소 empty()보다 두 xml에 없을 때. 두 번째 xml에없는 소스에서 복사되지 않은 요소를 복사해야합니다.xsl 두 번째 xml로 소스 xml을 바꾸고 두 번째 xml에는 존재하지 않는 손대지 않은 요소로

예를 들어 : 먼저 XML은

두 번째 XML을 포함

<SHOP> 
<SHOPITEM> 
    <CATEGORYTEXT>some ways</CATEGORYTEXT> 
    <PRODUKT_ID>80002158</PRODUKT_ID> 
    <PRODUCT>Zvedák 5t</PRODUCT> 
    <PRODUCTNAME>Zvedák 5t</PRODUCTNAME> 
    <ZBOZI_PRODUCTNO>t2</ZBOZI_PRODUCTNO> 
    <OZNACENO>0</OZNACENO> 
</SHOPITEM> 
<SHOPITEM> 
    <CATEGORYTEXT>VÝPRODEJ</CATEGORYTEXT> 
    <PRODUKT_ID>80002419</PRODUKT_ID> 
    <PRODUCT>3d Dochucovací sada Renga</ZPRODUCT> 
    <PRODUCTNAME>3d Dochucovací sada Renga</PRODUCTNAME> 
    <ZBOZI_PRODUCTNO>vv61</ZBOZI_PRODUCTNO> 
    <OZNACENO>0</OZNACENO> 
</SHOPITEM> 
</SHOP> 

...

<dataroot> 
<zbozi_FEED_DATA> 
    <ZBOZI_CELA_CESTA>Heureka.cz | Auto-moto | Autodíly | Ramena řízení</ZBOZI_CELA_CESTA> 
    <PRODUKT_ID>80002158</PRODUKT_ID> 
    <ZBOZI_PRODUCT>Zvedák - panenka 5t</ZBOZI_PRODUCT> 
    <ZBOZI_PRODUCTNAME>Zvedák - panenka 5t</ZBOZI_PRODUCTNAME> 
    <ZBOZI_PRODUCTNO>t2</ZBOZI_PRODUCTNO> 
    <OZNACENO>0</OZNACENO> 
</zbozi_FEED_DATA> 
</dataroot> 

그리고 욕망 출력 XML을 포함 :

<SHOP> 
    <SHOPITEM> 
    <zbozi_FEED_DATA> 
    <CATEGORYTEXT>Heureka.cz | Auto-moto | Autodíly | Ramena řízení</CATEGORYTEXT> 
    <PRODUKT_ID>80002158</PRODUKT_ID> 
    <PRODUCT>Zvedák - panenka 5t</PRODUCT> 
    <PRODUCTNAME>Zvedák - panenka 5t</PRODUCTNAME> 
    <ZBOZI_PRODUCTNO>t2</ZBOZI_PRODUCTNO> 
    <OZNACENO>0</OZNACENO> 
    </SHOPITEM> 
    <SHOPITEM> 
    <CATEGORYTEXT>VÝPRODEJ</CATEGORYTEXT> 
    <PRODUKT_ID>80002419</PRODUKT_ID> 
    <PRODUCT>3d Dochucovací sada Renga</PRODUCT> 
    <PRODUCTNAME>3d Dochucovací sada Renga</PRODUCTNAME> 
    <ZBOZI_PRODUCTNO>vv61</ZBOZI_PRODUCTNO> 
    <OZNACENO>0</OZNACENO> 
    </SHOPITEM> 
</SHOP> 

을하지만 지금 잘못 출력은 다음과 같습니다

10 그리고 내 XSL 어트 변환이있다 :

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" exclude-result-prefixes="xhtml"> 
<xsl:output method="xml" indent="yes" encoding="utf-8" /> 
<xsl:strip-space elements="ZBOZI_CELA_CESTA" /> 
<xsl:param name="clientXml" select="'FEED_DATA.xml'" /> 
<xsl:variable name="client" select="document(`$`clientXml)//zbozi_FEED_DATA" /> 
<xsl:template match="SHOPITEM/CATEGORYTEXT"> 
    <CATEGORYTEXT> 
    <xsl:value-of select="$client[PRODUKT_ID=current()/../ITEM_ID]/ZBOZI_CELA_CESTA" /> 
    </CATEGORYTEXT> 
</xsl:template> 
<xsl:template match="SHOPITEM/PRODUCT"> 
<PRODUCT> 
<xsl:value-of select="$client[PRODUKT_ID=current()/../ITEM_ID]/ZBOZI_PRODUCT" /> 
</PRODUCT> 
</xsl:template> 
<xsl:template match="SHOPITEM/PRODUCTNAME"> 
<PRODUCTNAME> 
<xsl:value-of select="$client[PRODUKT_ID=current()/../ITEM_ID]/ZBOZI_PRODUCTNAME" /> 
</PRODUCTNAME> 
</xsl:template> 
<xsl:template match="@*|node()"> 
<xsl:copy> 
<xsl:apply-templates select="@*|node()"/> 
</xsl:copy> 
</xsl:template> 
</xsl:stylesheet> 

, 사람이 도움을 줄 수주십시오?

+1

안녕하십니까. 특정 질문을하고 코딩을 시도하고 실패한 곳을 알려주십시오. 광범위한 질문을하거나 숙제를 완료하라고 요청하지 마십시오. – alexisdevarennes

+0

안녕 Alexis, 나는 2 달 이상이 xsl의 다른 setttings를 시도했기 때문에 나는 거기에서 바로 실패하지만 아직 작동하지 않습니다. 그리고 여전히이 요소가 transfomation 이후 두 번째 XML에서 빠진 경우 요소가 최종 XML에서 비어 있습니다. 그리고 빈 요소는 매일 확인하고 수동으로 포함해야합니다. 그러므로 나는 그것을 어떻게하는지 모른다. –

답변

0

당신이 찾고있는 것이 확실하지 않지만 ZBOZI_CELA_CESTA 또는 CATEGORYTEXT를 노드에 넣고 싶습니다. 이것은 다음과 같이 수행됩니다.

<xsl:template match="SHOPITEM/CATEGORYTEXT"> 
    <CATEGORYTEXT> 
    <xsl:value-of select="$client[PRODUKT_ID=current()/../ITEM_ID]/ZBOZI_CELA_CESTA | $client[PRODUKT_ID=current()/../ITEM_ID]/CATEGORYTEXT"/> 
    </CATEGORYTEXT> 
</xsl:template> 
+0

안녕하세요, 크리스챤, 고마워요.하지만 내가 찾는 것이 아닙니다. 제 경우 ZBOZI_CELA_CESTA가 없으면 CATEGORYTEXT를 복사해야합니다. 소스 피드 및 두 번째 피드에서 주로 홈이있는 제품은 지체없이 수동으로 생성됩니다. 그래서 요소 나 노드가 없으면 소스 피드에서 원본 요소를 사용해야합니다. 마지막으로 피드에는 빈 요소가 없습니다. –