脚本宝典收集整理的这篇文章主要介绍了php – 如何使用匹配的节点连接两个XML文件,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
例如,XML-1就像:
<FOO> </A> </B> </C> </D> </FOO>@H_404_4@和XML-2:
<FOO> </B> </E> </FOO>@H_404_4@检查< B> ==< B>的最佳方法是什么?然后添加< E>
更新
好吧,我不能用这个假设的例子来解决这个问题,并且认为我会更新我正在做的事情,看看是否有人可以帮助我解决这个问题.我已经尝试过下面的方法以及我在SO上找到的其他方法,但没有运气.
真正的架构如下:
file1.xml
<?xml version="1.0"?> <DATA> <ITEM> <PRODUCT_TYPE>simple</PRODUCT_TYPE> <STYLE_COLOR>1524740007</STYLE_COLOR> <SHORT_DESCRIPTION>Black Shoe</SHORT_DESCRIPTION> <CLASS_NamE>FOOTWEAR</CLASS_NAME> <statUS>Disabled</STATUS> </ITEM> ... </DATA>@H_404_4@file2.xml
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="merge.xsl" ?> <DATA> <ITEM> <STYLE_COLOR>1524740007</STYLE_COLOR> <NEXT_ARRIVAL>2011-08-05</NEXT_ARRIVAL> </ITEM> .... </DATA>@H_404_4@我需要弄清楚的是生成一个新的XML文件,它将这些节点与相同的SYTLE_COLOR合并,如下所示:
<DATA> <ITEM> <PRODUCT_TYPE>simple</PRODUCT_TYPE> <STYLE_COLOR>1524740007</STYLE_COLOR> <SHORT_DESCRIPTION>Black Shoe</SHORT_DESCRIPTION> <CLASS_NAME>FOOTWEAR</CLASS_NAME> <NEXT_ARRIVAL>2011-08-05</NEXT_ARRIVAL> <STATUS>Disabled</STATUS> </ITEM>@H_404_4@我尝试创建一个看起来像的merge.xsl:
<?xml version="1.0" encoding="ISO-8859-1"?> <xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" version="1.0" encoding="ISO-8859-1" indent="yes" /> <xsl:output indent="yes"/> <xsl:VARiable name="with" select="'file-2.xml'" /> <xsl:template match="@*|node()"> <xsl:copy> <xsl:apply-templates select="@*|node()" /> </xsl:copy> </xsl:template> <xsl:template match="scene"> <xsl:copy> <xsl:apply-templates select="@*|node()" /> <xsl:variable name="info" select="document($with)/DATA/ITEM[STYLE_COLOR=current()/STYLE_COLOR]/." /> <xsl:for-each select="$info/*"> <xsl:if test="name()!='STYLE_COLOR'"> <xsl:copy-of select="." /> </xsl:if> </xsl:for-each> </xsl:copy> </xsl:template> </xsl:transform>@H_404_4@我也试过像这样的合并:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output indent="yes"/> <xsl:variable name="input2" select="document('file-2.xml')/DATA/ITEM"/> <xsl:template match="STYLE_COLOR"> <xsl:copy> <xsl:apply-templates select="*"/> </xsl:copy> </xsl:template> <xsl:template match="*"> <xsl:choose> <xsl:when test="$input2/*[name()=name(current())]"> <xsl:copy-of select="$input2/*"/> </xsl:when> <xsl:otherwise> <xsl:copy-of select="."/> </xsl:otherwise> </xsl:choose> </xsl:template> </xsl:stylesheet>@H_404_4@
[XSLT 1.0]
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output indent="yes"/> <xsl:strip-space elements="*"/> <xsl:variable name="input2" select="document('test_input2.xml')/DATA"/> <xsl:template match="node()|@*"> <xsl:copy> <xsl:apply-templates select="node()|@*"/> </xsl:copy> </xsl:template> <xsl:template match="ITEM"> <xsl:variable name="item" select=" $input2/ITEM[STYLE_COLOR=current()/STYLE_COLOR]"/> <xsl:variable name="ITEM" select="."/> <xsl:if test="$item"> <xsl:copy> <xsl:for-each select="$item/*"> <xsl:if test="count($ITEM/*[name()=name(current())])=0"> <xsl:copy-of select="." /> </xsl:if> </xsl:for-each> <xsl:apply-templates select="*"/> </xsl:copy> </xsl:if> </xsl:template> </xsl:stylesheet>@H_404_4@应用于此input1.xml:
<DATA> <ITEM> <PRODUCT_TYPE>simple</PRODUCT_TYPE> <STYLE_COLOR>1524740007</STYLE_COLOR> <SHORT_DESCRIPTION>Black Shoe</SHORT_DESCRIPTION> <CLASS_NAME>FOOTWEAR</CLASS_NAME> <STATUS>Disabled</STATUS> </ITEM> <ITEM> <PRODUCT_TYPE>simple</PRODUCT_TYPE> <STYLE_COLOR>1524740008</STYLE_COLOR> <SHORT_DESCRIPTION>Black Shoe</SHORT_DESCRIPTION> <CLASS_NAME>FOOTWEAR</CLASS_NAME> <STATUS>Disabled</STATUS> </ITEM> <ITEM> <PRODUCT_TYPE>simple</PRODUCT_TYPE> <STYLE_COLOR>777</STYLE_COLOR> <SHORT_DESCRIPTION>Black Shoe</SHORT_DESCRIPTION> <CLASS_NAME>FOOTWEAR</CLASS_NAME> <STATUS>Disabled</STATUS> </ITEM> </DATA>@H_404_4@和input2.xml合并,产生:
<DATA> <ITEM> <STYLE_COLOR>1524740007</STYLE_COLOR> <NEXT_ARRIVAL>2011-08-05</NEXT_ARRIVAL> <CLASS_NAME>XXX</CLASS_NAME> <OTHER>yyY</OTHER> </ITEM> <ITEM> <STYLE_COLOR>1524740008</STYLE_COLOR> <NEXT_ARRIVAL>2011-08-05</NEXT_ARRIVAL> </ITEM> </DATA>@H_404_4@生产:
<DATA> <ITEM> <NEXT_ARRIVAL>2011-08-05</NEXT_ARRIVAL> <OTHER>YYY</OTHER> <PRODUCT_TYPE>simple</PRODUCT_TYPE> <STYLE_COLOR>1524740007</STYLE_COLOR> <SHORT_DESCRIPTION>Black Shoe</SHORT_DESCRIPTION> <CLASS_NAME>FOOTWEAR</CLASS_NAME> <STATUS>Disabled</STATUS> </ITEM> <ITEM> <NEXT_ARRIVAL>2011-08-05</NEXT_ARRIVAL> <PRODUCT_TYPE>simple</PRODUCT_TYPE> <STYLE_COLOR>1524740008</STYLE_COLOR> <SHORT_DESCRIPTION>Black Shoe</SHORT_DESCRIPTION> <CLASS_NAME>FOOTWEAR</CLASS_NAME> <STATUS>Disabled</STATUS> </ITEM> </DATA>@H_404_4@请注意:
>转换不会覆盖给定ITEM的现有元素,只需复制缺少的元素即可>只有在input2.xml中匹配时,input1.xml中的ITEM才会复制到输出中
以上是脚本宝典为你收集整理的php – 如何使用匹配的节点连接两个XML文件全部内容,希望文章能够帮你解决php – 如何使用匹配的节点连接两个XML文件所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。