xsl用第二个xml替换源xml,并使用第二个xml中不存在的未触及元素
我使用xsl转换,从源XML复制元素,并替换第二个XML中匹配并最终生成XML的元素。它可以工作,但当第二个xml中不存在元素时,复制元素empty()。 我需要从源代码中复制在第二个xml中不存在的未触及元素 例如:包含的第一个XMLxsl用第二个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>
<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产品都是手动创建的,并有延迟。所以,若元素或节点丢失,我需要使用源提要中的原始元素。最后,提要将不会有空元素。