我有xsl转换,它从源XML复制元素,并替换第二个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>
第二个 xml 包含 ...
<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>
但现在是错误的输出:
<SHOP>
<SHOPITEM>
<zbozi_FEED_DATA>
<CATEGORYTEXT>Heureka.cz | Auto-moto | Autodíly | Ramena řízení</CATEGORYTEXT>
<ITEM_IDD>80002158</ITEM_ID>
<PRODUCT>Zvedák - panenka 5t</PRODUCT>
<PRODUCTNAME>Zvedák - panenka 5t</PRODUCTNAME>
<ZBOZI_PRODUCTNO>t2</ZBOZI_PRODUCTNO>
<OZNACENO>0</OZNACENO>
</SHOPITEM>
<SHOPITEM>
**<CATEGORYTEXT/>**
<ITEM_ID>80002419</ITEM_ID>
**<PRODUCT/>**
**<PRODUCTNAME/>**
<ZBOZI_PRODUCTNO>vv61</ZBOZI_PRODUCTNO>
<OZNACENO>0</OZNACENO>
</SHOPITEM>
</SHOP>
我的 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>
拜托,谁能帮忙?
我不确定您要查找的内容,但在我看来,您想将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>