以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (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=89854)


--  作者:hormones
--  发布时间:3/21/2011 3:36:00 PM

--  [求助]请问通过XSLT能否合并被分解的文档
通过XSLT2.0可以把XML文档分解成多个文档,那么这些被分解的文档是否可以通过XSLT再合并成原文档?可以做到吗?
请教各位高人,万分感谢!!
--  作者:tiantianhuasha
--  发布时间:3/22/2011 10:49:00 AM

--  
我也想知道,分解后的XML文档怎样合并?
--  作者:Qr
--  发布时间:3/22/2011 5:22:00 PM

--  
XSL:
document('test.xml')
--  作者:dlyoke
--  发布时间:3/23/2011 9:39:00 AM

--  
同求
--  作者:hormones
--  发布时间:3/23/2011 2:44:00 PM

--  
哪位高人能给指点一下啊  通过其他人合并也可以 楼上的几位如果有什么解决方法告诉我一下
--  作者:jj_long
--  发布时间:4/10/2011 9:09:00 AM

--  
XSLT/XPath 2.0里提供了document函数来读取某一个文件的内容。

你可以通过这个函数将多个XML文件读入,放到变量里边,然后进行出处理/合并/输出。

比如:

Test1.xml
----------------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<testrun run="test1">
 <test name="foo" pass="true"/>
 <test name="bar" pass="true"/>
 <test name="baz" pass="true"/>
</testrun>


Test2.xml
----------------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<testrun run="test2">
 <test name="foo" pass="true"/>
 <test name="bar" pass="false"/>
 <test name="baz" pass="false"/>
</testrun>


合并文件的XSLT:
----------------------------------------------------------------------
<?xml version='1.0'?>

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output method="xml"/>

<xsl:template match="/">
 <xsl:variable name="p_a" select="document('test1.xml')"/>
 <xsl:variable name="p_b" select="document('test2.xml')"/>
 
 <data>
  <xsl:copy-of select="$p_a/*"/>
  <xsl:copy-of select="$p_b/*"/>
 </data>
</xsl:template>

</xsl:stylesheet>

输出结果:
---------------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<data>
 <testrun run="test1">
  <test name="foo" pass="true"/>
  <test name="bar" pass="true"/>
  <test name="baz" pass="true"/>
 </testrun>
 <testrun run="test2">
  <test name="foo" pass="true"/>
  <test name="bar" pass="false"/>
  <test name="baz" pass="false"/>
 </testrun>
</data>


注:
     运行以上代码需要一个XSLT 2.0的引擎。


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