gpt4 book ai didi

xml - 如何使用XPath选择非空同级节点的笛卡尔乘积集?

转载 作者:行者123 更新时间:2023-12-03 16:37:13 29 4
gpt4 key购买 nike

第一次来这里,所以请不要犹豫,让我知道我做错了什么。

我正在使用Altova Stylevision打印出表单文档,并且需要为两个节点集合的每个唯一集合打印表单的副本。下面是一个示例XML,可以更好地解释我的要求。

<form>
<Animals>
<Animal>
<AName>Boomer</AName>
<AAddress>House</AAddress>
</Animal>
<Animal>
<AName>Growl</AName>
<AAddress>Street</AAddress>
</Animal>
<Animal>
<AName>Incognito</AName>
<AAddress>Nowhere</AAddress>
</Animal>
</Animals>
<People>
<Person>
<PName>Willy</PName>
<PAddress>123 Common Lane</PAddress>
</Person>
<Person>
<PName>Wonka</PName>
<PAddress>Chocolate Factory</PAddress>
</Person>
</People>
</form>


我想从上述示例中生成6个唯一值(笛卡尔乘积),其中包含 <Animal><Person>的每种组合,但它们都不为空。因此,此示例的输出将是(仅显示分组,需要所有子节点,而不仅仅是名称):

([Boomer, Willy], [Boomer, Wonka], [Growl, Willy], [Growl, Wonka], [Incognito, Willy], [Incognito, Wonka])


编辑:我试图获取节点,而不仅仅是 <Name>元素值。因为我将整个StyleVision表单包装在此模板中,所以作用域应该在 <Animal><Person>级别。这样,在表单中,我可以说 /AName, /PName,并在表单的每个副本上为 /AName/PName取一个值。它应充当元素节点的6个实例,每个实例代表 <Person><Animal>的唯一组合。

我研究了 for # in # return语法,但无法弄清楚如何返回唯一集。以下是我到目前为止尝试过的方法:

for $a in form/Animals/Animal, $p in form/People/Person return ($a, $p)




form/Animals/Animal | form/People/Person


谁能指出我正确的方向?

谢谢!

最佳答案

更新资料

您的for表达式是正确的,您只需要添加一个元素构造函数即可获得所需的结果:

for $animal in $x/Animals/Animal,
$person in $x/People/Person
return element union { $animal, $person }


元素名称(示例中为 union)可以是您想要的任何名称。



这些原始代码示例将从问题中生成结果字符串。

有点难以理解,但这可以满足您的要求:

concat("(",
concat(string-join(
for $animal in /form/Animals/Animal/Name,
$person in /form/People/Person/Name
return concat("[", concat(string-join(($animal, $person), ", "), "]")), ", "), ")"))


如果可以使用XPath / XQuery 3.0处理器,则可以使用 ||串联运算符而不是 concat函数调用,该函数(在某种程度上)更具可读性:

"(" ||
string-join(
for $animal in /form/Animals/Animal/Name,
$person in /form/People/Person/Name
return "[" || string-join(($animal, $person), ", ") || "]"
, ", ")
|| ")"

关于xml - 如何使用XPath选择非空同级节点的笛卡尔乘积集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20687193/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com