Xml XQUERY:使用不同的参数多次查询查询的输出
我有很多XML文件,需要根据来自命令行的用户定义输入输出文件名 下面是一个简单的XQuery示例,它抓住了问题的本质 File1.xmlXml XQUERY:使用不同的参数多次查询查询的输出,xml,xquery,Xml,Xquery,我有很多XML文件,需要根据来自命令行的用户定义输入输出文件名 下面是一个简单的XQuery示例,它抓住了问题的本质 File1.xml <?xml version="1.0" encoding="utf-8"?> <Description> <FileName>File1</FileName> <Persons> <Person> <Name>Anna</Name>
<?xml version="1.0" encoding="utf-8"?>
<Description>
<FileName>File1</FileName>
<Persons>
<Person>
<Name>Anna</Name>
<Age>25</Age>
</Person>
<Person>
<Name>Marco</Name>
<Age>25</Age>
</Person>
<Person>
<Name>Mary</Name>
<Age>13</Age>
</Person>
</Persons>
</Description>
输出:
<FileName>File1</FileName>
File1
提前感谢。这里有一个可能的解决方案(假设您的XQuery处理器允许您将地图作为用户定义的输入进行传递): 第二种选择更接近于原始解决方案。名称和年龄绑定到单独的变量:
declare variable $NAMES external := ('Anna', 'Marco');
declare variable $AGES external := (25, 25);
for $description in collection('db')/Description
where every $test in for-each-pair($NAMES, $AGES, function($name, $age) {
exists($description/Persons/Person[Name = $name and Age = $age])
}) satisfies $test
return $description/FileName
下面是一个可能的解决方案(假设您的XQuery处理器允许您将地图作为用户定义的输入进行传递): 第二种选择更接近于原始解决方案。名称和年龄绑定到单独的变量:
declare variable $NAMES external := ('Anna', 'Marco');
declare variable $AGES external := (25, 25);
for $description in collection('db')/Description
where every $test in for-each-pair($NAMES, $AGES, function($name, $age) {
exists($description/Persons/Person[Name = $name and Age = $age])
}) satisfies $test
return $description/FileName
非常感谢。我只有一个问题,在一个真实的案例中,我有6个变量,而不是像这个案例中的2个,包括姓名和年龄。我认为想法会完全相同。我从你的答案中学到了很多,再次感谢你。谢谢!我只有一个问题,在一个真实的例子中,我有6个变量,而不是像这个例子中的2个,名字和年龄。我想这个想法会完全一样。我从你的答案中学到了很多,再次感谢你。
declare variable external $INPUT := map {
'Anna': 25,
'Marco': 25
};
for $description in collection('db')/Description
where every $test in map:for-each($INPUT, function($name, $age) {
exists($description/Persons/Person[Name = $name and Age = $age])
}) satisfies $test
return $description/FileName
declare variable $NAMES external := ('Anna', 'Marco');
declare variable $AGES external := (25, 25);
for $description in collection('db')/Description
where every $test in for-each-pair($NAMES, $AGES, function($name, $age) {
exists($description/Persons/Person[Name = $name and Age = $age])
}) satisfies $test
return $description/FileName