Wednesday, 15 July 2015

xslt - Strange behavior with xsl:result-document from within Altova XML with Saxon -


मेरी इनपुट फ़ाइल:

  & lt; फ़ोल्डर्स & gt; & Lt; फ़ोल्डर का नाम = "एक" स्तर = "1" मेटाडेटाफ़ाइल = "LVM20metadata.tsv" & gt; & Lt; subfolder name = "a / er" level = "2" फिल्टर = "नहीं" / & gt; & Lt; subfolder name = "a / ir" स्तर = "2" फिल्टर = "हां" / & gt; & Lt; सबफ़ोल्डर का नाम = "ए / आर" स्तर = "2" फिल्टर = "नहीं" / & gt; & Lt; उपफ़ोल्डर का नाम = "एक / या" स्तर = "2" फिल्टर = "हां" / & gt; & Lt; / फ़ोल्डर & gt; & Lt; फ़ोल्डर का नाम = "बी" स्तर = "1" मेटाडेटाफ़ाइल = "LVM21metadata.tsv" & gt; & Lt; subfolder name = "b / er" level = "2" फिल्टर = "नहीं" / & gt; & Lt; subfolder name = "b / ir" level = "2" फिल्टर = "हां" / & gt; & Lt; सबफ़ोल्डर का नाम = "बी / आर" स्तर = "2" फ़िल्टर = "नहीं" / & gt; & Lt; सबफ़ोल्डर का नाम = "बी / या" स्तर = "2" फ़िल्टर = "हां" / & gt; & Lt; / फ़ोल्डर & gt; & Lt; / फ़ोल्डरों & gt;  

मेरी स्टाइलशीट:

  & lt; xsl: स्टाइलशीट संस्करण = "2.0" xmlns: xsl = "http://www.w3.org/1999 / एक्सएसएल / ट्रांसफ़ॉर्म "एक्सएमएलएन: एक्सएस =" http://www.w3.org/2001/XMLSchema "xmlns: fn =" http://www.w3.org/2005/xpath-functions "बाहर-परिणाम- उपसर्ग = "एफएन एक्सएस" & gt; & Lt; xsl: टेम्पलेट मैच = "/" & gt; & LT; XSL: लागू-टेम्पलेट्स / & gt; & Lt; / XSL: टेम्पलेट & gt; & Lt; xsl: टेम्पलेट मैच = "फ़ोल्डर्स" & gt; & LT; XSL: लागू-टेम्पलेट्स / & gt; & Lt; / XSL: टेम्पलेट & gt; & Lt; xsl: टेम्पलेट मैच = "फ़ोल्डर" & gt; & Lt; xsl: परिणाम-दस्तावेज़ विधि = "xml" स्टैंडअलोन = "हां" href = "{@ नाम} .xml" & gt; & LT; हैलो & gt; & lt; / हैलो & gt; & Lt; / XSL: परिणाम-दस्तावेज़ & gt; & Lt; / XSL: टेम्पलेट & gt; & Lt; / XSL: स्टाइलशीट & gt;  

यह दो परिणाम-दस्तावेज नहीं बनाता है ऐसा क्यों है? (Saxon9he का उपयोग करते हुए)

क्या यह दो एक्सएमएल दस्तावेजों को a.xml और b.xml नामों के साथ नहीं बनाया जाना चाहिए?

यह वास्तव में एक ज्ञात विशेषता है (या बग, यदि आप चाहें) यदि आप अपनी स्टाइलशीट ओक्सीजन से चलाते हैं, या आपके मामले में अल्टोवा मुझे यकीन नहीं है कि वर्तमान संस्करणों में अभी भी यह "सुविधा" है, लेकिन यह निम्नानुसार काम करती है:

  • अगर कोई प्राथमिक परिणाम दस्तावेज़ नहीं है (यानी, एक खाली अनुक्रम उत्पन्न होता है)
  • और एक माध्यमिक परिणाम दस्तावेज़ है (जैसे xsl: परिणाम-दस्तावेज़ )
  • उपयोगकर्ता इंटरफ़ेस में ऐसे ऐसे पहले परिणाम दस्तावेज़ दिखाएं
  • किसी भी अन्य परिणाम दस्तावेज़ को सामान्य रूप से बनाया जाना

मेरा मानना ​​है कि इसका कारण प्राथमिक उपकरण को पुनर्निर्देशित करने के लिए उपकरण किसी प्रकार के URIResolver का उपयोग करते हैं अगर कोई आउटपुट नहीं है, तो UriResolver नहीं बुलाया जाता है, लेकिन उसके बाद अगले माध्यमिक आउटपुट द्वारा कॉल किया जाता है, जिसके परिणामस्वरूप इस व्यवहार का परिणाम होता है। यही कारण है कि यह फाइल आपके सिस्टम के अस्थायी फ़ाइल स्थान में समाप्त हो जाती है (आपको प्राथमिक आउटपुट दस्तावेज़ यहां "सामान्य" रूपान्तरण के साथ मिल जाएगा)।

जब भी मैं यह मुठभेड़ करता हूं और नहीं व्यवहार की तरह, साधारण समाधान एक डमी प्राथमिक परिणाम दस्तावेज़ बनाने के लिए है आपके मामले में ऐसा कुछ हो सकता है:

  & lt; xsl: टेम्पलेट मैच = "/" & gt; & Lt; root & gt; प्राथमिक परिणाम दस्तावेज़, कृपया ध्यान दें, अन्य फ़ाइलें देखें। & Lt; / root & gt; & LT; XSL: लागू-टेम्पलेट्स / & gt; & Lt; / XSL: टेम्पलेट & gt;  

मेरा मानना ​​है कि एक सिस्टम संपत्ति या वातावरण चर है जो आप पूछ सकते हैं कि यह UI में चल रहा है या नहीं, या उसके अनुपस्थिति में, एक आबंटन कमांडलाइन के लिए एक पैरामीटर जोड़ें जो एक स्थिर पैरामीटर सेट करता है (दुर्भाग्य से, यह केवल XSLT 3.0 में काम करता है), जिसे आप उपयोग-जब में उपयोग कर सकते हैं।


No comments:

Post a Comment