如何将数据从XML过滤到XML [英] How filter data from XML to XML

查看:56
本文介绍了如何将数据从XML过滤到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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆