以文本方式查看主题

-  计算机科学论坛  (http://bbs.xml.org.cn/index.asp)
--  『 XSL/XSLT/XSL-FO/CSS 』  (http://bbs.xml.org.cn/list.asp?boardid=8)
----  xslt如何进行多结点比较并加标记,高手帮帮忙!  (http://bbs.xml.org.cn/dispbbs.asp?boardid=8&rootid=&id=52782)


--  作者:frestlily
--  发布时间:9/18/2007 10:12:00 AM

--  xslt如何进行多结点比较并加标记,高手帮帮忙!
问题:通过比较两个结点,找出相同和不同,记录所有修改的内容和标记。
如:
<!-- 原始值内容 -->
 <response>
  <list code="list" count="3">
   <item>
    <property code="listId">
     <value>1</value>
    </property>
    <property code="content">
     <value><![CDATA[列表1内容]]></value>
    </property>
   </item>
   <item>
    <property code="listId">
     <value>2</value>
    </property>
    <property code="content">
     <value><![CDATA[列表2内容old]]></value>
    </property>
   </item>
  </list>
 </response>
<!--更改后的内容 -->
 <request>
  <list code="list" count="2">
   <item>
    <property code="listId">
     <value>2</value>
    </property>
    <property code="content">
     <value><![CDATA[列表2修改内容]]></value>
    </property>
   </item>
   <item>
    <property code="listId">
     <value>3</value>
    </property>
    <property code="content">
     <value><![CDATA[新加的内容]]></value>
    </property>
   </item>
  </list>
 </request>
通过xslt摸板进行比较和转换,生成结果如下:
<!-- xslt转换后生成的内容 -->
 <request>
  <list code="list" count="3">
   <item operation="delete">
    <property code="listId">
     <value>1</value>
    </property>
    <property code="content">
     <value><![CDATA[列表1内容]]></value>
    </property>
   </item>
   <item operation="update">
    <property code="listId">
     <value>2</value>
    </property>
    <property code="content">
     <value><![CDATA[列表2修改内容]]></value>
    </property>
   </item>
   <item operation="insert">
    <property code="listId">
     <value>3</value>
    </property>
    <property code="content">
     <value><![CDATA[新加的内容]]></value>
    </property>
   </item>
  </list>
 </request>
试了多回,还是不行,请大家帮帮忙。
--  作者:luypmp
--  发布时间:9/20/2007 8:41:00 PM

--  
楼主这个几个xml文件太有才了,
仔细研究中


--  作者:luypmp
--  发布时间:9/20/2007 9:37:00 PM

--  
有点灵感了!
可以把list看成一个数据表datatable,两个字段(listId,content),其中listId为这个表的主键,
对于原始值内容,就相当于这个表有两列:
listId       content
1            列表1内容
2            列表2内容old
对于更改后的内容,这个表中的内容就变成了:
listId        content
2             列表2修改内容
3             新加的内容
由于listId为主键,所以对这个表的修改过程就是:
listId为1的行被删除
listId为2的行由于content变了所以这行就被更新了
listId为3的行由于原始表中没有这列,所以它就是新插入的行了


我想xml文件必然符合一个scheme的定义,那么我们就可以先将这个xml文件转换成
<list>
<listId>2</listId>
<content>列表2修改内容</content>
</list>
这样就好处理了 !


--  作者:luypmp
--  发布时间:9/20/2007 9:43:00 PM

--  
楼主,这几个xml是书上的吗?如果是,不知书名是什么?
如果不是,那太遗憾了,呵呵,那我就看不到这么精彩的内容了;

其实我是做软件开发,而又跟xslt相关,所以看到楼主的例子有点兴奋了


--  作者:frestlily
--  发布时间:9/21/2007 10:57:00 AM

--  
呵呵,再次感谢luypmp:)
我的处理和你的相同,是少了个条件,得在list中加个keycode,象数据库表的id一样标识一个唯一的item结点,这样就可以处理了。
另:
这个xml 文件是自己定义的。呵呵!
我也正在处理xslt相关的东西,好多问题还请多指教。

W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
62.500ms