我有三个文件xml:
来自水手的实例S1(S1.xml):
<xml>
<data>
<sid>22</sid>
<sname>Dustin</sname>
<rating>7</rating>
<age>45</age>
</data>
<data>
<sid>31</sid>
<sname>Lubber</sname>
<rating>8</rating>
<age>55</age>
</data>
<data>
<sid>58</sid>
<sname>Rusty</sname>
<rating>10</rating>
<age>35</age>
</data>
</xml>
来自水手的实例S2(S2.xml):
<xml>
<data>
<sid>28</sid>
<sname>Yuppy</sname>
<rating>9</rating>
<age>35</age>
</data>
<data>
<sid>31</sid>
<sname>Lubber</sname>
<rating>8</rating>
<age>55</age>
</data>
<data>
<sid>44</sid>
<sname>Gruppy</sname>
<rating>5</rating>
<age>35</age>
</data>
<data>
<sid>58</sid>
<sname>Rusty</sname>
<rating>10</rating>
<age>35</age>
</data>
</xml>
来自Reserves(R1.xml)的实例R1:
<xml>
<data>
<sid>22</sid>
<bid>101</bid>
<day>10/10/96</day>
</data>
<data>
<sid>58</sid>
<bid>103</bid>
<day>11/12/96</day>
</data>
</xml>
我试图将运算符代数用于xml文件,例如:union(∪),intersection(∩),set-difference( - )和cross-product(x)
即时尝试搜索S1∪S2,S1∩S2,S1-S2,S1 X R1
例如我试图制作包含S1∪S2的新文件,如:
<xml>
<data>
<sid>22</sid>
<sname>Dustin</sname>
<rating>7</rating>
<age>45</age>
</data>
<data>
<sid>31</sid>
<sname>Lubber</sname>
<rating>8</rating>
<age>55</age>
</data>
<data>
<sid>58</sid>
<sname>Rusty</sname>
<rating>10</rating>
<age>35</age>
</data>
<data>
<sid>28</sid>
<sname>Yuppy</sname>
<rating>9</rating>
<age>35</age>
</data>
<data>
<sid>44</sid>
<sname>Gruppy</sname>
<rating>5</rating>
<age>35</age>
</data>
</xml>
有人可以帮我吗?
我正在尝试使用XSLT ..
感谢..
最好的问候,
里贾尔
答案 0 :(得分:1)
有一些示例函数可以在W3C函数和运算符规范中执行这些操作(使用XSLT 2.0或XQuery 1.0)
http://www.w3.org/TR/xpath-functions/#union-intersect-except-on-values
例如,设置差异在XQuery中编码为:
declare function eg:value-except (
$arg1 as xs:anyAtomicType*,
$arg2 as xs:anyAtomicType*) as xs:anyAtomicType*
{
fn:distinct-values($arg1[not(.=$arg2)])
}
答案 1 :(得分:0)
您没有非常清楚地解释您的要求。但是,如果您的要求是找到S1.xml和S2.xml中出现的所有<data>
元素,并且匹配的<sid>
足以将数据元素视为匹配,并且如果没有在单个文件中重复,然后是XSLT 2.0中最简单的解决方案
<xsl:for-each-group select="doc('S1.xml')//data, doc('S2.xml')//data"
group-by="sid">
<xsl:copy-of select=".[count(current-group()) = 2]"/>
</xsl:for-each-group>