तो मेरे पास यह (असामान्य) कार्य है

"एक प्रश्न लिखें जो / संगीत तत्व के सभी उप तत्वों को उलट देता है ताकि उनके स्वयं के उप तत्व गुण बन जाएं और उनकी विशेषताएँ उप तत्व बन जाएं। उन उप तत्वों के लिए जिनके स्वयं के उप तत्वों की कमी है, उनकी डेटा सामग्री के साथ एक विशेषता बननी चाहिए नाम 'मूल्य'।"

जहां मैं इस डेटाबेस का उपयोग करता हूं: Schytheron/0a5c4756db62a1f43fc40226659c12cf/raw/71378ab9cede19e3f5bb33e948177a9fccfcc132/songs.xml और मैं वास्तव में यह भी नहीं जानता कि कहां से शुरू करूं। मैं पूरी तरह से खो गया हूँ। क्या इसे केवल पुनरावर्ती रूप से हल किया जा सकता है या कोई और तरीका है (क्योंकि मैंने कभी Xquery में रिकर्सन करने की कोशिश नहीं की है)? क्या आपके पास इसे या किसी उपयोगी कार्य को हल करने के लिए कोई सुझाव/रणनीति है (मैं Xquery के लिए बहुत नया हूं इसलिए मुझे वास्तव में पता नहीं है कि कई उपयोगी कार्य) मैं उपयोग कर सकता हूं?

विचार? विचार?

धन्यवाद!

संपादित करें: बस चीजों को स्पष्ट करने के लिए। मुझे पता है कि मैं शायद प्रत्येक तत्व और उनके बाल तत्वों के लिए मैन्युअल रूप से नेस्टेड फॉर-लूप की एक्स राशि के साथ ऐसा कर सकता हूं लेकिन मैं जानना चाहता हूं कि इसे गतिशील बनाने का कोई तरीका है ताकि यह किसी भी एक्सएमएल डेटाबेस के साथ काम करे।

1
Schytheron 6 मई 2018, 16:56

1 उत्तर

सबसे बढ़िया उत्तर

मूल तत्व के बच्चों को बदलने के सीमित उपयोग के मामले के लिए आप कुछ कार्यों का उपयोग कर सकते हैं:

declare function local:transform($element as element()) as element() {
  element {name($element)} { 
    $element/node() ! local:attribute(.), 
    $element/@* ! local:element(.) 
  }
};

declare function local:attribute($node as node()) as attribute() {
  typeswitch ($node) 
     case element() return attribute {name($node)} {data($node) }
     case text() return attribute value { $node }
     default return ()

};

declare function local:element($att as attribute()) as element() {
  element {name($att)} { data($att) }
};

/*!element {name()} { *!local:transform(.) }

https://xqueryfiddle.liberty-development.net/nbUY4ki

3
Mads Hansen 6 मई 2018, 19:57