0

私は Xquery を初めて使用します。指定された xml を別の xml 形式に変更したいと考えています。

与えられた XML:

<?xml version="1.0" encoding="UTF-8"?>
<Store>
<consumer id="H01">
<name>John Doe</name>
<items>
<item type = "Torch">
<price>$3</price>
</item>
<item type = "Gas">
<price>$4</price>
</item>
</items>
</consumer >
<consumer id="H05">
<name>Jane Doe</name>
<items>
<item type = "Cell">
<price>$8</price>
</item>
<item type = "Shirt">
<price>$12</price>
</item>
</items>
</consumer>

必要な XML 形式:

<Store>
<user>
<number><id>H01</id><name>John Doe</name></number>
<number><id>H05</id><name>Jane Doe</name></number>
</user>
<inventory>
<number><type>Torch</type><price>$3</price></number>
<number><type>Gas</type><price>$4</price></number>
<number><type>Cell</type><price>$8</price></number>
<number><type>Shirt</type><price>$12</price></number>
</inventory>
</Store>

私が作ったXquery:

for $customer in distinct-values(doc("../xml/store.xml")/store/consumer/@id)
let $name := doc("../xml/store.xml")/store/consumer[@id=$customer]/name
for $object in distinct-  values(doc("../xml/store.xml")/store/consumer[@id=$customer]/items/item/@type)
return 
<store>
<user>
<number>
<id>{$customer}</id>
{$name}
</number>
</user>
<inventory>
<number>
<type>{$object}</type>
</number>
</inventory>
</store>

正確にどこが間違っているのですか?属性を新しいノード要素として作成する方法はありますか?

4

1 に答える 1

0

2 つの for 句がネストされているため、この場合は不要です。私はこのようなことをします:

let $doc := doc("../xml/store.xml")
let $customerIds := distinct-values($doc/store/consumer/@id)

return
<store>
<user>{for $customerId in $customerIds
let $consumer := $doc/store/consumer[@id=$customerId]
return <number><id>{data($consumer/@id)}</id><name>{$consumer/name}</name></number>
}
</user>
<inventory>
similar thing for items
</inventory>
</store>

属性を新しいノード要素として作成する方法はありますか?

はい、たとえば data() 関数を使用してテキストを抽出できます。上記の例を参照してください。

于 2013-10-29T14:47:37.580 に答える