XSL 将源 XML 替换为第二个 XML,其中包含第二个 XML 中不存在的未触及元素



我有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>

最新更新