एसवीजी को एक्सएचटीएमएल आउटपुट में जोड़ने के लिए दस्तावेज़ के साथ कॉपी-इन का उपयोग करना


113

मेरे XML को संसाधित करते समय, मैं एक एसवीजी फाइल को संदर्भित करने की कोशिश कर रहा हूं जो कि hrefमेरे आउटपुट HTML में सीधे एक विशेषता से संदर्भित है जिसमें निम्न पंक्ति है:

 <xsl:copy-of copy-namespaces="yes" select="document(@href)"/>

copy-namespacesआवश्यक के बाद से डिफ़ॉल्ट मान "हाँ" वैसे भी है नहीं होना चाहिए, लेकिन मैं के बारे में है या नहीं, मैं यह कोशिश की है सवाल को रोकने के लिए जोड़ दिया है।

फ़ाइलों को HTML में कॉपी किया जाता है, लेकिन कोई भी नामांकित तत्व hosed हैं। उदाहरण के लिए, एक फाइल जो कॉपी होने से पहले इस तरह दिखती है:

  <rdf:RDF>
      <cc:Work rdf:about="">
        <dc:format>image/svg+xml</dc:format>
        <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
        <dc:title/>
      </cc:Work>
    </rdf:RDF>
  </metadata>
  <g transform="translate(-519.21143,-667.79077)" id="layer1">
    <image xlink:href="data:image/png;base64

इस तरह दिखता है:

  <_0:RDF xmlns:_0="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
      <_0:Work xmlns:_0="http://creativecommons.org/ns#" about="">
        <_0:format xmlns:_0="http://purl.org/dc/elements/1.1/">image/svg+xml</_0:format>
        <_0:type xmlns:_0="http://purl.org/dc/elements/1.1/" resource="http://purl.org/dc/dcmitype/StillImage"/>
        <_0:title xmlns:_0="http://purl.org/dc/elements/1.1/"/>
      </_0:Work>
    </_0:RDF>
  </metadata>
  <g id="layer1" transform="translate(-519.21143,-667.79077)">
    <image href="data:image/png;base64

hrefछवि तत्व के मूल्य पर लापता xlink नाम स्थान विशेष रूप से समस्याग्रस्त है।

बिना किसी व्याख्या के एसवीजी फ़ाइल में पढ़ने के लिए मैं इसे अलग तरीके से कैसे कर सकता हूं, इस पर कोई विचार?

मुझे एक समाधान मिला है कि "काम करता है", लेकिन यह एक हैक है और मैं कुछ और सुरुचिपूर्ण चाहूंगा:

<xsl:template name="topic-image-svg">
    <!-- Generate tags to embed SWFs -->
    <xsl:element name="div">
      <xsl:if test="@width">
        <xsl:attribute name="width">
          <xsl:value-of select="@width"/>
        </xsl:attribute>
      </xsl:if>
      <xsl:if test="@height">
        <xsl:attribute name="height">
          <xsl:value-of select="@height"/>
        </xsl:attribute>
      </xsl:if>     
        <xsl:apply-templates select="document(@href)" mode="svg"/>
    </xsl:element>
  </xsl:template>

  <xsl:template match="*" mode="svg">
    <xsl:copy copy-namespaces="yes">
      <xsl:for-each select="@*">
        <xsl:choose>
          <xsl:when test="self::node()[name() = 'xlink:href']">
            <xsl:attribute name="xlink:href"><xsl:value-of select="."></xsl:value-of></xsl:attribute>
          </xsl:when>
          <xsl:otherwise>
            <xsl:copy></xsl:copy>
          </xsl:otherwise>
        </xsl:choose>
      </xsl:for-each>
     <xsl:apply-templates mode="svg"></xsl:apply-templates>
    </xsl:copy>
  </xsl:template>

5
क्या आपकी स्टाइलशीट में रूट टैग में घोषित सभी नाम स्थान हैं?
फिल्लीनज

6
एसवीजी नामस्थान-सुव्यवस्थित है? आपके द्वारा दिखाए जाने वाले टुकड़े में उपसर्ग 'xlink' के लिए बाइंडिंग शामिल नहीं है।
CM Sperberg-McQueen

3
आप किस XSLT 2.0 प्रोसेसर का उपयोग करते हैं? क्या आप न्यूनतम या पूर्ण नमूने पोस्ट कर सकते हैं जिससे हमें समस्या का समाधान करने की अनुमति मिले? आप किस XSLT आउटपुट विधि का उपयोग करते हैं?
मार्टिन ऑनन

15
पहली नजर में यह आपके XSLT प्रोसेसर के बग जैसा लगता है। लेकिन जब आप कहते हैं कि आप इसे एक HTML दस्तावेज़ में कॉपी कर रहे हैं, तो मेरा संदेह पैदा होता है। यदि आप इसे HTML DOM में जोड़ रहे हैं, तो HTML DOM नेमस्पेस-फ्रेंडली नहीं है, इसलिए सभी प्रकार की चीजें हो सकती हैं। हालाँकि, आपका शीर्षक "xHTML" कहता है। इसलिए मुझे लगता है कि हमें और अधिक जानने की आवश्यकता है: आप किस XSLT प्रोसेसर का उपयोग कर रहे हैं, और आप इसे कैसे चला रहे हैं?
माइकल केय

1
क्या आप अपना कोड और कार्यान्वयन साझा करना चाहेंगे? मैं कम से कम इसे पुन: पेश करने के लिए उत्सुक हूं।
गेरार्ड वैन हेल्डेन

जवाबों:


1

मुझे लगता है कि आपने इस XSLT ऑपरेशन के कारण पर चोट की है:

http://www.w3schools.com/xsl/el_namespace-alias.asp

जब आउटपुट जनरेट किया जाता है, जब तक कि नाम स्थान परिवर्तन नहीं हो जाता है तब तक आपके नामांकित नामस्थान बरकरार रहते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.