ขณะประมวลผล XML ของฉันฉันกำลังพยายามคัดลอกไฟล์ SVG ที่อ้างอิงจากhref
แอตทริบิวต์ลงใน HTML เอาต์พุตโดยตรงด้วยบรรทัดต่อไปนี้:
<xsl:copy-of copy-namespaces="yes" select="document(@href)"/>
copy-namespaces
ไม่ควรจะเป็นสิ่งที่จำเป็นตั้งแต่ค่าเริ่มต้นคือ "ใช่" แล้ว แต่ฉันได้เพิ่มเพื่อป้องกันไม่ให้คำถามเกี่ยวกับหรือไม่ฉันได้พยายามมัน
ไฟล์จะถูกคัดลอกไปยัง HTML แต่องค์ประกอบเนมสเปซจะถูกซ่อนไว้ ตัวอย่างเช่นไฟล์ที่มีลักษณะเช่นนี้ก่อนที่จะคัดลอก:
<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
เนมสเปซ xlink ที่หายไปในhref
ค่าขององค์ประกอบรูปภาพเป็นปัญหาอย่างยิ่ง
มีความคิดเห็นอย่างไรกับการอ่านไฟล์ SVG โดยไม่มีการตีความ
ฉันพบวิธีแก้ปัญหาหนึ่งที่ "ใช้ได้ผล" แต่เป็นการแฮ็กและฉันต้องการสิ่งที่หรูหรากว่านี้:
<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>