【发布时间】:2020-01-11 06:58:35
【问题描述】:
第一个 xml 文件是价格信息:
<prices>
<priceList effDate="2006-11-15">
<prod num="557">
<price currency="USD">29.99</price>
<discount type="CLR">10.00</discount>
</prod>
<prod num="563">
<price currency="USD">69.99</price>
</prod>
<prod num="443">
<price currency="USD">39.99</price>
<discount type="CLR">3.99</discount>
</prod>
</priceList>
</prices>
第二个XML文件是订单信息
<order num="00299432" date="2006-09-15" cust="0221A">
<item dept="WMN" num="557" quantity="1" color="navy">
<prod num="557">
<price currency="USD">29.99</price>
<discount type="CLR">10.00</discount>
</prod>
</item>
<item dept="ACC" num="563" quantity="1"/>
<item dept="ACC" num="443" quantity="2"/>
<item dept="MEN" num="784" quantity="1" color="white"/>
<item dept="MEN" num="784" quantity="1" color="gray"/>
<item dept="WMN" num="557" quantity="1" color="black"/>
</order>
我的预期输出如下所示,这意味着所有 <prod> 元素都在 <item> 下,并带有所有 <item> 属性信息
<item dept="WMN" num="557" quantity="1" color="navy">
<prod num="557">
<price currency="USD">29.99</price>
<discount type="CLR">10.00</discount>
</prod>
</item>
MY CODE 如下所示:
let $prices := fn:doc('/training/prices.xml')/prices
let $order := fn:doc('/training/order.xml')/order
where $prices/priceList/prod[@num=$order/item/@num]
for $kk in $prices/priceList/prod[@num=$order/item/@num]
return
<item>
{$kk}
</item>
输出:
<item>
<prod num="557">
<price currency="USD">29.99</price>
<discount type="CLR">10.00</discount>
</prod>
</item>
请指导一下,谢谢
【问题讨论】:
-
为什么第二个文件有
item,第一个已经有prod信息?在您预期的输出中,您似乎只是复制了那个特定的item元素。其他元素应该怎么做? -
您可以使用函数
functx:copy-attributes。请注意,您必须复制函数的代码 - 它不是命名空间functx的内部函数, -
@Ansari - 很难遵循这里的逻辑。如果要复制“项目属性”,则需要有这样的项目。而且我看不出您想如何选择这样的项目。拥有它后,我们可以向您展示如何复制其属性。
标签: xml xpath xquery marklogic