Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
xsl用第二个xml替换源xml,并使用第二个xml中不存在的未触及元素_Xml_Xslt_Transformation - Fatal编程技术网

xsl用第二个xml替换源xml,并使用第二个xml中不存在的未触及元素

xsl用第二个xml替换源xml,并使用第二个xml中不存在的未触及元素,xml,xslt,transformation,Xml,Xslt,Transformation,我使用xsl转换,从源XML复制元素,并替换第二个XML中匹配并最终生成XML的元素。它可以工作,但当第二个xml中不存在元素时,复制元素empty()。 我需要从源代码中复制在第二个xml中不存在的未触及元素 例如:包含的第一个XML <SHOP> <SHOPITEM> <CATEGORYTEXT>some ways</CATEGORYTEXT> <PRODUKT_ID>80002158</PRODUKT_ID>

我使用xsl转换,从源XML复制元素,并替换第二个XML中匹配并最终生成XML的元素。它可以工作,但当第二个xml中不存在元素时,复制元素empty()。 我需要从源代码中复制在第二个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>

一些方法
80002158
Zvedák 5t
Zvedák 5t
t2
0
VÝPRODEJ
80002419
三维多库科瓦奇萨达伦加酒店
三维多库科瓦奇萨达伦加酒店
vv61
0
第二个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>

Heureka.cz |自动摩托车|自动驾驶|拉美娜řzení
80002158
Zvedák-panenka 5t
Zvedák-panenka 5t
t2
0
并希望输出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>

Heureka.cz |自动摩托车|自动驾驶|拉美娜řzení
80002158
Zvedák-panenka 5t
Zvedák-panenka 5t
t2
0
VÝPRODEJ
80002419
三维多库科瓦奇萨达伦加酒店
三维多库科瓦奇萨达伦加酒店
vv61
0
但现在是错误的输出:

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

Heureka.cz |自动摩托车|自动驾驶|拉美娜řzení
80002158
Zvedák-panenka 5t
Zvedák-panenka 5t
t2
0
****
80002419
****
****
vv61
0
我的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>


欢迎来到SO。请提出具体问题,尝试编写代码,并告诉我们您失败的地方。请不要问广泛的问题或要求我们完成你的家庭作业。你好,Alexis,我失败了,因为两个多月来我尝试了这个xsl的不同设置,但仍然不起作用。而且,如果第二个XML中缺少this元素,而不是转换后缺少this元素,那么最后一个XML中的元素仍然是空的。。我必须每天检查并手动添加空滤芯。所以我不知道怎么做。嗨,克里斯蒂安,谢谢你,但这不是我想要的。在我的情况下,如果ZBOZI_CELA_CESTA丢失,我需要复制CATEGORYTEXT。大多数情况下,源进料和第二进料处的槽a产品都是手动创建的,并有延迟。所以,若元素或节点丢失,我需要使用源提要中的原始元素。最后,提要将不会有空元素。