2011-08-23 17 views
5

यदि मैं यह XSLXSL नाम स्थान समस्या

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
    <xsl:output method="html"/> 
    <xsl:output omit-xml-declaration="yes" encoding="UTF-8"/> 

    <xsl:template match='/'> 
     <xsl:value-of select="//Description" /> 
    </xsl:template> 
</xsl:stylesheet> 

और यह एक्सएमएल

<ArrayOfLookupValue xmlns="http://switchwise.com.au/" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> 
    <LookupValue> 
    <Description>AGL</Description> 
    <Value>8</Value> 
    </LookupValue> 
    <LookupValue> 
    <Description>Australian Power &amp; Gas</Description> 
    <Value>6</Value> 
    </LookupValue> 
    <LookupValue> 
    <Description>EnergyAustralia</Description> 
    <Value>13</Value> 
    </LookupValue> 
    <LookupValue> 
    <Description>Origin Energy</Description> 
    <Value>9</Value> 
    </LookupValue> 
    <LookupValue> 
    <Description>TRU Energy</Description> 
    <Value>7</Value> 
    </LookupValue> 
</ArrayOfLookupValue> 

कैसे मैं वास्तव में इस लाइन से कुछ डेटा प्राप्त करते हैं:

<xsl:value-of select="//Description" /> 

मैं घंटे बिताए हैं इस पर और मैं इस निष्कर्ष पर आया हूं कि xmlns = नेमस्पेस मुझे दुःख पैदा कर रहा है।

किसी भी मदद की बहुत सराहना की।

BTW एक्सएमएल एक वेब सेवा से आ रही है तो मैं नहीं कर सकते बस "बदल" - मैं इसे preprocess कर सकते हैं लेकिन यह है कि आदर्श नहीं है ...

इसके अलावा मुझे लगता है कि इस बात की पुष्टि की है से नामस्थान को हटाने एक्सएमएल का एक नकल समस्या को ठीक करता है।

+0

अच्छा प्रश्न, +1। स्पष्टीकरण और एक छोटा और आसान समाधान के लिए मेरा जवाब देखें। –

+0

आप सही हैं कि नामस्थान अंतर बना रहा है। Dimitre की अच्छी व्याख्या देखें ... और यदि आप एक्सएमएल नेमस्पेस (विशेष रूप से, XPath में उपयोग किए जाने पर) पर पढ़ते हैं तो आप वास्तव में भविष्य में अपना समय बचाएंगे। – LarsH

उत्तर

12

यह XPath और XSLT दोनों के लिए सबसे अधिक पूछे जाने वाला प्रश्न है।

संक्षिप्त उत्तर है कि XPath में एक अपरिवर्तित नाम को "नो नेमस्पेस" माना जाता है। हालांकि, एक डिफ़ॉल्ट नामस्थान वाले दस्तावेज़ में अपरिक्स्ड नाम डिफ़ॉल्ट नामस्थान से संबंधित हैं।

इसलिए, इस तरह दस्तावेज़ के लिए अभिव्यक्ति

//Description 

कुछ भी नहीं का चयन करता है (क्योंकि वहाँ कोई Description (या किसी अन्य) तत्व दस्तावेज़ में है कि करने के लिए "कोई नाम स्थान" अंतर्गत आता है - सभी तत्व नाम डिफ़ॉल्ट नामस्थान से संबंधित हैं)।

समाधान:

अपने XSLT है कि एक ही namespace-uri() XML दस्तावेज़ की डिफ़ॉल्ट नाम स्थान के रूप में में एक नाम स्थान को परिभाषित करें। फिर एक xpath एक्सप्रेशन में इस्तेमाल किसी भी नाम के लिए तो परिभाषित नाम स्थान का उपसर्ग का उपयोग करें:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:x="http://switchwise.com.au/"> 
    <xsl:output method="html"/> 
    <xsl:output omit-xml-declaration="yes" encoding="UTF-8"/> 

    <xsl:template match='/'> 
     <xsl:copy-of select="//x:Description" /> 
    </xsl:template> 
</xsl:stylesheet> 

इस बदलाव प्रदान की XML दस्तावेज़ को लागू किया जाता है:

<ArrayOfLookupValue xmlns="http://switchwise.com.au/" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> 
    <LookupValue> 
    <Description>AGL</Description> 
    <Value>8</Value> 
    </LookupValue> 
    <LookupValue> 
    <Description>Australian Power &amp; Gas</Description> 
    <Value>6</Value> 
    </LookupValue> 
    <LookupValue> 
    <Description>EnergyAustralia</Description> 
    <Value>13</Value> 
    </LookupValue> 
    <LookupValue> 
    <Description>Origin Energy</Description> 
    <Value>9</Value> 
    </LookupValue> 
    <LookupValue> 
    <Description>TRU Energy</Description> 
    <Value>7</Value> 
    </LookupValue> 
</ArrayOfLookupValue> 

चाहता था, सही परिणाम:

<Description xmlns="http://switchwise.com.au/" 
xmlns:i="http://www.w3.org/2001/XMLSchema-instance" 
>AGL</Description> 
<Description xmlns="http://switchwise.com.au/" 
xmlns:i="http://www.w3.org/2001/XMLSchema-instance" 
>Australian Power &amp; Gas</Description> 
<Description xmlns="http://switchwise.com.au/" 
xmlns:i="http://www.w3.org/2001/XMLSchema-instance" 
>EnergyAustralia</Description> 
<Description xmlns="http://switchwise.com.au/" 
xmlns:i="http://www.w3.org/2001/XMLSchema-instance" 
>Origin Energy</Description> 
<Description xmlns="http://switchwise.com.au/" 
xmlns:i="http://www.w3.org/2001/XMLSchema-instance" 
>TRU Energy</Description> 
+0

+1 अच्छा जवाब। आप एक प्रश्न के रूप में एक प्रश्न के रूप में कैसे चिह्नित करते हैं? – LarsH

+0

@ लार्सएच: मुझे नहीं लगता कि एक प्रश्न के रूप में एक प्रश्न को चिह्नित करने का एक तरीका है - वर्तमान में एफएक्यू उनके विचारों की संख्या से निर्धारित होते हैं - जो वास्तव में "सर्वाधिक देखी गयी" है। और हमें जो चाहिए वह अकसर किये गए सवाल नहीं है बैट एफएटी - अक्सर पूछे जाने वाले विषयों :) –

+0

एलओएल - यह कितना आसान है कि जब आप जानते हैं !!!इस तरह के एक सरल, समझने में आसान उत्तर के लिए बहुत बहुत धन्यवाद, मैंने इन परिवर्तनों को अपने एक्सएसएल में रखा है और यह उम्मीद के रूप में काम कर रहा है। एक बार फिर धन्यवाद!! – Rob

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