2013-06-10 4 views
5

मेरे पास openerp के आधार पर एक webservice द्वारा उत्पन्न एक XML है, इसमें कई तत्वों के लिए एक उपसर्ग पीपी है। मैं कई तत्वों का चयन करके xslt का उपयोग कर उस XML फ़ाइल को किसी अन्य XML में कनवर्ट करना चाहता हूं। जब मैं परिवर्तन निष्पादित करने का प्रयास करता हूं, तो यह मुझे उपसर्ग पीपी के लिए 'prefix xsl तत्व के लिए बाध्य नहीं है' त्रुटि दिखाता है, मैं पीपी घोषित नहीं कर सकता क्योंकि यह कई उत्तरों में वर्णित है, मैं उपयोग को अनदेखा कैसे कर सकता हूं उस उपसर्ग का?XSLT तत्व के लिए उपसर्ग xsl बाध्य नहीं है

+0

"के रूप में यह कई जवाब में बताया गया है मैं पीपी की घोषणा नहीं कर सकते हैं" - क्यों नहीं? स्टाइलशीट के भीतर यूआरआई को उपयुक्त उपसर्ग में मैप करना इस समस्या का सही दृष्टिकोण है। –

+0

क्योंकि मेरे पास उस उपसर्ग के लिए कोई यूआरआई नहीं है, यह स्वचालित रूप से openerp से उत्पन्न होता है। – Rida

उत्तर

0

मुझे इस समस्या का समाधान मिला। हम सभी नामस्थान और हमारे एक्सएमएल फ़ाइल में उपसर्ग की अनदेखी करने के लिए इस XSLT परिवर्तन का उपयोग कर सकते हैं:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 
<xsl:strip-space elements="*"/> 

<xsl:template match="@*|node()[not(self::*)]"> 
    <xsl:copy/> 
</xsl:template> 

<xsl:template match="*"> 
    <xsl:element name="{local-name()}"> 
    <xsl:apply-templates select="node()|@*"/> 
    </xsl:element> 
</xsl:template> 
</xsl:stylesheet> 
1

XPath pp:* सिंटैक्स को अपने स्थानीय नामों के बावजूद किसी विशेष नामस्थान यूआरआई के साथ सभी तत्वों/विशेषताओं का चयन करने के लिए प्रदान करता है, लेकिन नामस्थान के बावजूद किसी विशेष स्थानीय नाम के साथ सभी तत्वों/विशेषताओं का चयन करने के लिए (सीधे) नहीं। यदि आप पहले से नहीं जानते, तो क्या नाम स्थान यूआरआई तो हो जाएगा बजाय

pp:foo/pp:bar 

आप की तरह

*[local-name() = 'foo']/*[local-name() = 'bar'] 

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

+0

जहां मैं इस पंक्ति को * [स्थानीय-नाम() = 'foo']/* [स्थानीय-नाम() = 'बार'] लिख सकता हूं क्योंकि मैं यह नियंत्रित नहीं कर सकता कि XML फ़ाइल कैसे उत्पन्न होती है, यह एक्सएसएलटी है ईएसबी में इस्तेमाल होने जा रहा है, इसलिए यह सिर्फ एक संदेश होगा और मैं उस पर एक्सएसएलटी लागू करूंगा। – Rida

+0

@Rida आपको इस चाल का उपयोग अपने सभी 'चयन' और' मिलान 'अभिव्यक्तियों में करना होगा जो चर नामस्थान वाले तत्वों को संदर्भित करते हैं। एक्सएमएल और आपके वर्तमान एक्सएसएलटी का उदाहरण देखे बिना और अधिक विशिष्ट होना असंभव है। –

+0

आपके उत्तर के लिए धन्यवाद मुझे मेरी समस्या का समाधान मिला – Rida

संबंधित मुद्दे