如何将数据从XML过滤到XML [英] How filter data from XML to XML
问题描述
你好,
有这个XML的问题,我需要XSLT过滤产品列表
基于RULE标签中的规则写入。 />
我只需复制与CAT匹配的PRODUCTS-LIST中的CAT和PROD数据以及RULE标签中的
PROD ID.
>
for ex:
============================== ==================== ========================
< ROOT>
< PAGE NAME ="主页" URL =" HP.html">
< RULES>
< RULE>
< CAT ID =" 1" ;>
< PRO ID =" 3">< / PRO>
< PRO ID =" 6">< / PRO> ;
< / CAT>
< CAT ID =" 3">
< PRO ID =" 2" >< / PRO>
< PRO ID =" 10">< / PRO>
< / CAT>
< / RULE>
< / RULES>
< / PAGE>
< PRODUCTS-LIST>
< CAT ID =" 1">
< PROD ID =" 12">
< NAME> Prod。姓名< / NAME>
< DESC><![CDATA [Html desc]]>< / DESC>
< / PROD>
< PROD ID =" 6">
< NAME> Prod。姓名< / NAME>
< DESC><![CDATA [Html desc]]>< / DESC>
< / PROD>
< PROD ID =" 3">
< NAME> Prod。姓名< / NAME>
< DESC><![CDATA [Html desc]]>< / DESC>
< / PROD>
< / CAT>
< CAT ID =" 2">
< PROD ID =" 7">
< NAME> Prod。姓名< / NAME>
< DESC><![CDATA [Html desc]]>< / DESC>
< / PROD>
< / CAT>
< CAT ID =" 3">
< PROD ID =" 10">
< NAME> Prod。姓名< / NAME>
< DESC><![CDATA [Html desc]]>< / DESC>
< / PROD>
< PROD ID =" 1">
< NAME> Prod。姓名< / NAME>
< DESC><![CDATA [Html desc]]>< / DESC>
< / PROD>
< PROD ID =" 2">
< NAME> Prod。姓名< / NAME>
< DESC><![CDATA [Html desc]]>< / DESC>
< / PROD>
< / CAT>
< / PRODUCTS-LIST>
< / ROOT>
==== ============================================== ==== ====================
XSLT trasf的最终结果。
=== =============================================== === =====================
< ROOT>
< PRODUCTS-LIST>
< CAT ID =" 1">
< PROD ID =" 6">
< NAME> Prod。姓名< / NAME>
< DESC><![CDATA [Html desc]]>< / DESC>
< / PROD>
< PROD ID =" 3">
< NAME> Prod。姓名< / NAME>
< DESC><![CDATA [Html desc]]>< / DESC>
< / PROD>
< / CAT>
< CAT ID =" 3">
< PROD ID =" 10">
< NAME> Prod。姓名< / NAME>
< DESC><![CDATA [Html desc]]>< / DESC>
< / PROD>
< PROD ID =" 2">
< NAME> Prod。姓名< / NAME>
< DESC><![CDATA [Html desc]]>< / DESC>
< / PROD>
< / CAT>
< / PRODUCTS-LIST>
< / ROOT>
================================================== =======================
有人能帮助我吗?
感谢您的回答!
Luca
此转型:
< xsl:stylesheet version =" 1.0"
xmlns:xsl =" http://www.w3.org/1999/XSL/Transform">
< xsl:output omit-xml-declaration =" yes" indent =" yes" />
< xsl:strip-space elements =" *" />
< xsl: template match =" ROOT">
< xsl:copy>
< xsl:apply-templates select =" PRODUCTS-LIST" />
< / xsl:copy>
< / xsl:template>
< xsl:template match ="产品 - 列表">
< xsl:copy>
< xsl:apply-templates
select =" CAT [@ ID = / * / * / * / RULE / CAT / @ ID]" />
< / xsl:copy>
< / xsl:template> ;
< xsl:template match =" CAT">
< xsl:copy-of select =
" PROD [@ID = / * / * / * / RULE / CAT
[@ID = current()/ @ ID] / PRO / @ ID]" />
< / xsl:template>
< / xsl:stylesheet>
应用于source.xml时:
< ROOT>
< PAGE NAME ="主页" URL =" HP.html">
< RULES>
< RULE>
< CAT ID =" 1" ;>
< PRO ID =" 3">< / PRO>
< PRO ID =" 6">< / PRO> ;
< / CAT>
< CAT ID =" 3">
< PRO ID =" 2" >< / PRO>
< PRO ID =" 10">< / PRO>
< / CAT>
< / RULE>
< / RULES>
< / PAGE>
< PRODUCTS-LIST>
< CAT ID =" 1">
< PROD ID =" 12">
< NAME> Prod。姓名< / NAME>
< DESC><![CDATA [Html desc]]>< / DESC>
< / PROD>
< PROD ID =" 6">
< NAME> Prod。姓名< / NAME>
< DESC><![CDATA [Html desc]]>< / DESC>
< / PROD>
< PROD ID =" 3">
< NAME> Prod。姓名< / NAME>
< DESC><![CDATA [Html desc]]>< / DESC>
< / PROD>
< / CAT>
< CAT ID =" 2">
< PROD ID =" 7">
< NAME> Prod。姓名< / NAME>
< DESC><![CDATA [Html desc]]>< / DESC>
< / PROD>
< / CAT>
< CAT ID =" 3">
< PROD ID =" 10">
< NAME> Prod。姓名< / NAME>
< DESC><![CDATA [Html desc]]>< / DESC>
< / PROD>
< PROD ID =" 1">
< NAME> Prod。姓名< / NAME>
< DESC><![CDATA [Html desc]]>< / DESC>
< / PROD>
< PROD ID =" 2">
< NAME> Prod。姓名< / NAME>
< DESC><![CDATA [Html desc]]>< / DESC>
< / PROD>
< / CAT>
< / PRODUCTS-LIST>
< / ROOT>
产生想要的结果:
< ROOT>
< PRODUCTS-LIST>
< PROD ID =" 6">
< NAME> Prod。名称< / NAME>
< DESC> Html desc< / DESC>
< / PROD>
< PROD ID =" 3">
< NAME> ;刺。名称< / NAME>
< DESC> Html desc< / DESC>
< / PROD>
< PROD ID =" 10">
< NAME> ;刺。名称< / NAME>
< DESC> Html desc< / DESC>
< / PROD>
< PROD ID =" 2">
< NAME> ;刺。名称< / NAME>
< DESC> Html desc< / DESC>
< / PROD>
< / PRODUCTS-LIST>
< / ROOT>
=====
欢呼,
Dimitre Novatchev。
http://fxsl.sourceforge.net/ - FXSL之家
" ;卢卡" <卢******** @ hotmail.com>在消息中写道
新闻:50 ************************** @ posting.google.c om ...您好,
有这个XML的问题,我需要XSLT来过滤产品列表
基于RULE标签中的规则写入。
我只需复制产品列表中的CAT和PROD数据,这些数据与RULE标签中的CAT和
PROD ID'相匹配。
例如:
> ================================================= = ========================
< ROOT>
< PAGE NAME ="主页" URL =" HP.html">
< RULES>
< RULE>
< CAT ID =" 1">
< PRO ID = " 3">< / PRO>
< PRO ID =" 6">< / PRO>
< / CAT>
< CAT ID =" ; 3">
< PRO ID =" 2">< / PRO>
< PRO ID =" 10">< / PRO>
< ; / CAT>
< / RULE>
< / RULES>
< / PAGE>
<产品列表>
< CAT ID = 1>
< PROD ID =" 12">
< NAME> Prod。姓名< / NAME>
< DESC><![CDATA [Html desc]]>< / DESC>
< / PROD>
< PROD ID =" 6">
< NAME> Prod。姓名< / NAME>
< DESC><![CDATA [Html desc]]>< / DESC>
< / PROD>
< PROD ID =" 3">
< NAME> Prod。姓名< / NAME>
< DESC><![CDATA [Html desc]]>< / DESC>
< / PROD>
< / CAT>
< CAT ID =" 2">
< PROD ID =" 7">
< NAME> Prod。姓名< / NAME>
< DESC><![CDATA [Html desc]]>< / DESC>
< / PROD>
< / CAT>
< CAT ID =" 3">
< PROD ID =" 10">
< NAME> Prod。姓名< / NAME>
< DESC><![CDATA [Html desc]]>< / DESC>
< / PROD>
< PROD ID =" 1">
< NAME> Prod。姓名< / NAME>
< DESC><![CDATA [Html desc]]>< / DESC>
< / PROD>
< PROD ID =" 2">
< NAME> Prod。姓名< / NAME>
< DESC><![CDATA [Html desc]]>< / DESC>
< / PROD>
< / CAT>
< / PRODUCTS-LIST>
< / ROOT>
======================== ========================== ========================
XSLT trasf的最终结果。
=============================== =================== ========================
< ROOT> ;
<产品列表>
< CAT ID =" 1">
< PROD ID =" 6">
< NAME>产品。姓名< / NAME>
< DESC><![CDATA [Html desc]]>< / DESC>
< / PROD>
< PROD ID =" 3">
< NAME> Prod。姓名< / NAME>
< DESC><![CDATA [Html desc]]>< / DESC>
< / PROD>
< / CAT>
< CAT ID =" 3">
< PROD ID =" 10">
< NAME> Prod。姓名< / NAME>
< DESC><![CDATA [Html desc]]>< / DESC>
< / PROD>
< PROD ID =" 2">
< NAME> Prod。姓名< / NAME>
< DESC><![CDATA [Html desc]]>< / DESC>
< / PROD>
< / CAT>
< / PRODUCTS-LIST>
< / ROOT>
======================== ========================== =======================
有人可以帮帮我吗?
感谢您的回答!
Luca
感谢Dimitre ,
非常有用,最后的建议
我需要在每个CAT标签中嵌套产品 - LISTS:
< ; CAT ID =" 1">
< PROD ID =" 6">
< NAME> Prod。姓名< / NAME>
< DESC><![CDATA [Html desc]]>< / DESC>
< / PROD>
<! - 等等...... - >
< / CAT>
非常感谢任何帮助!
***通过Developersdex发送 http://www.developersdex.com ***
不要只是参加USENET ......获得奖励!
我在下面看不到任何产品 - 列表???也没有嵌套。
=====
干杯,
Dimitre Novatchev。
http://fxsl.sourceforge.net/ - FXSL的主页
>
" luca milan" <卢******** @ hotmail.com>在消息中写道
news:3f ********************* @ news.frii.net ...感谢Dimitre,
非常有用,最后的建议
我需要在每个CAT标签中嵌套产品 - LISTS:
< CAT ID =" 1" >
< PROD ID =" 6">
< NAME> Prod。姓名< / NAME>
< DESC><![CDATA [Html desc]]>< / DESC>
< / PROD>
<! - 依此类推...... - >
< / CAT>
非常感谢任何帮助!!!
***通过Developersdex发送 http://www.developersdex.com *** <不要只参加USENET ......获得奖励!
Hello,
have a problem with this XML, I need XSLT to filter the products list
based on rules writes in RULE tag.
I need copy only CAT and PROD data in PRODUCTS-LIST that match CAT and
PROD ID''s in RULE tag.
for ex:
================================================== ========================
<ROOT>
<PAGE NAME="homepage" URL="HP.html">
<RULES>
<RULE>
<CAT ID="1">
<PRO ID="3"></PRO>
<PRO ID="6"></PRO>
</CAT>
<CAT ID="3">
<PRO ID="2"></PRO>
<PRO ID="10"></PRO>
</CAT>
</RULE>
</RULES>
</PAGE>
<PRODUCTS-LIST>
<CAT ID="1">
<PROD ID="12">
<NAME>Prod. name</NAME>
<DESC><![CDATA[ Html desc ]]></DESC>
</PROD>
<PROD ID="6">
<NAME>Prod. name</NAME>
<DESC><![CDATA[ Html desc ]]></DESC>
</PROD>
<PROD ID="3">
<NAME>Prod. name</NAME>
<DESC><![CDATA[ Html desc ]]></DESC>
</PROD>
</CAT>
<CAT ID="2">
<PROD ID="7">
<NAME>Prod. name</NAME>
<DESC><![CDATA[ Html desc ]]></DESC>
</PROD>
</CAT>
<CAT ID="3">
<PROD ID="10">
<NAME>Prod. name</NAME>
<DESC><![CDATA[ Html desc ]]></DESC>
</PROD>
<PROD ID="1">
<NAME>Prod. name</NAME>
<DESC><![CDATA[ Html desc ]]></DESC>
</PROD>
<PROD ID="2">
<NAME>Prod. name</NAME>
<DESC><![CDATA[ Html desc ]]></DESC>
</PROD>
</CAT>
</PRODUCTS-LIST>
</ROOT>
================================================== ========================
the final result of XSLT trasf.
================================================== ========================
<ROOT>
<PRODUCTS-LIST>
<CAT ID="1">
<PROD ID="6">
<NAME>Prod. name</NAME>
<DESC><![CDATA[ Html desc ]]></DESC>
</PROD>
<PROD ID="3">
<NAME>Prod. name</NAME>
<DESC><![CDATA[ Html desc ]]></DESC>
</PROD>
</CAT>
<CAT ID="3">
<PROD ID="10">
<NAME>Prod. name</NAME>
<DESC><![CDATA[ Html desc ]]></DESC>
</PROD>
<PROD ID="2">
<NAME>Prod. name</NAME>
<DESC><![CDATA[ Html desc ]]></DESC>
</PROD>
</CAT>
</PRODUCTS-LIST>
</ROOT>
================================================== =======================
Can anybody help me?
Thanks for answers!
Luca
This transformation:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="ROOT">
<xsl:copy>
<xsl:apply-templates select="PRODUCTS-LIST"/>
</xsl:copy>
</xsl:template>
<xsl:template match="PRODUCTS-LIST">
<xsl:copy>
<xsl:apply-templates
select="CAT[@ID = /*/*/*/RULE/CAT/@ID]"/>
</xsl:copy>
</xsl:template>
<xsl:template match="CAT">
<xsl:copy-of select=
"PROD[@ID = /*/*/*/RULE/CAT
[@ID = current()/@ID]/PRO/@ID]"/>
</xsl:template>
</xsl:stylesheet>
when applied on your source.xml:
<ROOT>
<PAGE NAME="homepage" URL="HP.html">
<RULES>
<RULE>
<CAT ID="1">
<PRO ID="3"></PRO>
<PRO ID="6"></PRO>
</CAT>
<CAT ID="3">
<PRO ID="2"></PRO>
<PRO ID="10"></PRO>
</CAT>
</RULE>
</RULES>
</PAGE>
<PRODUCTS-LIST>
<CAT ID="1">
<PROD ID="12">
<NAME>Prod. name</NAME>
<DESC><![CDATA[ Html desc ]]></DESC>
</PROD>
<PROD ID="6">
<NAME>Prod. name</NAME>
<DESC><![CDATA[ Html desc ]]></DESC>
</PROD>
<PROD ID="3">
<NAME>Prod. name</NAME>
<DESC><![CDATA[ Html desc ]]></DESC>
</PROD>
</CAT>
<CAT ID="2">
<PROD ID="7">
<NAME>Prod. name</NAME>
<DESC><![CDATA[ Html desc ]]></DESC>
</PROD>
</CAT>
<CAT ID="3">
<PROD ID="10">
<NAME>Prod. name</NAME>
<DESC><![CDATA[ Html desc ]]></DESC>
</PROD>
<PROD ID="1">
<NAME>Prod. name</NAME>
<DESC><![CDATA[ Html desc ]]></DESC>
</PROD>
<PROD ID="2">
<NAME>Prod. name</NAME>
<DESC><![CDATA[ Html desc ]]></DESC>
</PROD>
</CAT>
</PRODUCTS-LIST>
</ROOT>
produces the wanted result:
<ROOT>
<PRODUCTS-LIST>
<PROD ID="6">
<NAME>Prod. name</NAME>
<DESC> Html desc </DESC>
</PROD>
<PROD ID="3">
<NAME>Prod. name</NAME>
<DESC> Html desc </DESC>
</PROD>
<PROD ID="10">
<NAME>Prod. name</NAME>
<DESC> Html desc </DESC>
</PROD>
<PROD ID="2">
<NAME>Prod. name</NAME>
<DESC> Html desc </DESC>
</PROD>
</PRODUCTS-LIST>
</ROOT>
=====
Cheers,
Dimitre Novatchev.
http://fxsl.sourceforge.net/ -- the home of FXSL
"Luca" <lu********@hotmail.com> wrote in message
news:50**************************@posting.google.c om...Hello,
have a problem with this XML, I need XSLT to filter the products list
based on rules writes in RULE tag.
I need copy only CAT and PROD data in PRODUCTS-LIST that match CAT and
PROD ID''s in RULE tag.
for ex:
================================================== ========================
<ROOT>
<PAGE NAME="homepage" URL="HP.html">
<RULES>
<RULE>
<CAT ID="1">
<PRO ID="3"></PRO>
<PRO ID="6"></PRO>
</CAT>
<CAT ID="3">
<PRO ID="2"></PRO>
<PRO ID="10"></PRO>
</CAT>
</RULE>
</RULES>
</PAGE>
<PRODUCTS-LIST>
<CAT ID="1">
<PROD ID="12">
<NAME>Prod. name</NAME>
<DESC><![CDATA[ Html desc ]]></DESC>
</PROD>
<PROD ID="6">
<NAME>Prod. name</NAME>
<DESC><![CDATA[ Html desc ]]></DESC>
</PROD>
<PROD ID="3">
<NAME>Prod. name</NAME>
<DESC><![CDATA[ Html desc ]]></DESC>
</PROD>
</CAT>
<CAT ID="2">
<PROD ID="7">
<NAME>Prod. name</NAME>
<DESC><![CDATA[ Html desc ]]></DESC>
</PROD>
</CAT>
<CAT ID="3">
<PROD ID="10">
<NAME>Prod. name</NAME>
<DESC><![CDATA[ Html desc ]]></DESC>
</PROD>
<PROD ID="1">
<NAME>Prod. name</NAME>
<DESC><![CDATA[ Html desc ]]></DESC>
</PROD>
<PROD ID="2">
<NAME>Prod. name</NAME>
<DESC><![CDATA[ Html desc ]]></DESC>
</PROD>
</CAT>
</PRODUCTS-LIST>
</ROOT>
================================================== ========================
the final result of XSLT trasf.
================================================== ========================
<ROOT>
<PRODUCTS-LIST>
<CAT ID="1">
<PROD ID="6">
<NAME>Prod. name</NAME>
<DESC><![CDATA[ Html desc ]]></DESC>
</PROD>
<PROD ID="3">
<NAME>Prod. name</NAME>
<DESC><![CDATA[ Html desc ]]></DESC>
</PROD>
</CAT>
<CAT ID="3">
<PROD ID="10">
<NAME>Prod. name</NAME>
<DESC><![CDATA[ Html desc ]]></DESC>
</PROD>
<PROD ID="2">
<NAME>Prod. name</NAME>
<DESC><![CDATA[ Html desc ]]></DESC>
</PROD>
</CAT>
</PRODUCTS-LIST>
</ROOT>
================================================== =======================
Can anybody help me?
Thanks for answers!
Luca
Thanks Dimitre,
very useful, last suggetstion
I need nest PRODUCTS-LISTS into each CAT tag:
<CAT ID="1">
<PROD ID="6">
<NAME>Prod. name</NAME>
<DESC><![CDATA[ Html desc ]]></DESC>
</PROD>
<!-- and so on.... -->
</CAT>
Thanks a lot for any Help!!!
*** Sent via Developersdex http://www.developersdex.com ***
Don''t just participate in USENET...get rewarded for it!
I don''t see any PRODUCTS-LISTS below??? Nor any nesting.
=====
Cheers,
Dimitre Novatchev.
http://fxsl.sourceforge.net/ -- the home of FXSL
"luca milan" <lu********@hotmail.com> wrote in message
news:3f*********************@news.frii.net...Thanks Dimitre,
very useful, last suggetstion
I need nest PRODUCTS-LISTS into each CAT tag:
<CAT ID="1">
<PROD ID="6">
<NAME>Prod. name</NAME>
<DESC><![CDATA[ Html desc ]]></DESC>
</PROD>
<!-- and so on.... -->
</CAT>
Thanks a lot for any Help!!!
*** Sent via Developersdex http://www.developersdex.com ***
Don''t just participate in USENET...get rewarded for it!
这篇关于如何将数据从XML过滤到XML的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!