我在Inkscape中有以下SVG版本,你可以看到它缺少SVG命名空间:
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg width="1000" height="715" id="svg2" p1:version="0.32" p2:version="0.46" version="1.0" p2:output_extension="org.inkscape.output.svg.inkscape" xmlns:p1="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:p2="http://www.inkscape.org/namespaces/inkscape">
<defs id="defs4">
<perspective p1:type="inkscape:persp3d" p2:vp_x="0 : 526.18109 : 1" p2:vp_y="0 : 1000 : 0" p2:vp_z="744.09448 : 526.18109 : 1" p2:persp3d-origin="372.04724 : 350.78739 : 1" id="perspective10" />
<perspective id="perspective2447" p2:persp3d-origin="372.04724 : 350.78739 : 1" p2:vp_z="744.09448 : 526.18109 : 1" p2:vp_y="0 : 1000 : 0" p2:vp_x="0 : 526.18109 : 1" p1:type="inkscape:persp3d" />
<perspective id="perspective3327" p2:persp3d-origin="372.04724 : 350.78739 : 1" p2:vp_z="744.09448 : 526.18109 : 1" p2:vp_y="0 : 1000 : 0" p2:vp_x="0 : 526.18109 : 1" p1:type="inkscape:persp3d" />
</defs>
<namedview id="base" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" gridtolerance="10000" guidetolerance="10" objecttolerance="10" p2:pageopacity="0.0" p2:pageshadow="2" p2:zoom="7" p2:cx="324.34286" p2:cy="238.59584" p2:document-units="px" p2:current-layer="svg2" showgrid="false" p2:window-width="1020" p2:window-height="718" p2:window-x="0" p2:window-y="14" />
<metadata id="metadata7">
<RDF>
<Work p6:about="" xmlns:p6="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<format>image/svg+xml</format>
<type p6:resource="http://purl.org/dc/dcmitype/StillImage" />
</Work>
</RDF>
</metadata>
<rect style="opacity:0.92000002;fill:none;fill-opacity:1;stroke:#000000;stroke-width:1.00288939;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" id="rect2473" width="172.33044" height="88.997108" x="419.00143" y="315.00143" rx="0.30000001" ry="0.30000001" />
</svg>
以下XSLT转换用于删除所有不必要的信息:
<xsl:stylesheet version=""1.0""
xmlns:xsl=""http://www.w3.org/1999/XSL/Transform""
xmlns:svg=""http://www.w3.org/2000/svg"">
<!-- Any element matching svg namespace is copied. -->
<xsl:template match=""svg:*"">
<xsl:copy>
<xsl:copy-of select=""@*[namespace-uri()='']""/>
<xsl:apply-templates select=""node()""/>
</xsl:copy>
</xsl:template>
<!-- Default: Exclude element -->
<xsl:template match=""*""/>
</xsl:stylesheet>
当运行XSLT转换时,它会生成空XML,因为根据我的理解,Root节点中缺少SVG Namespace。
所以我的问题是,是否有可能以某种方式解决这个问题?我确实尝试将命名空间添加到文档的Root节点,但它没有帮助。
由于
答案 0 :(得分:0)
以下样式表将复制源文档的默认无命名空间中的所有元素和属性,并将它们放在SVG命名空间中:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://www.w3.org/2000/svg">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="*[not(namespace-uri())]">
<xsl:element name="{local-name()}">
<xsl:copy-of select="@*[not(namespace-uri())]"/>
<xsl:apply-templates select="node()"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
应用于您的输入示例,结果为:
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="1000" height="715" id="svg2" version="1.0">
<defs id="defs4">
<perspective id="perspective10"/>
<perspective id="perspective2447"/>
<perspective id="perspective3327"/>
</defs>
<namedview id="base" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" gridtolerance="10000" guidetolerance="10" objecttolerance="10" showgrid="false"/>
<metadata id="metadata7">
<RDF>
<Work>
<format>image/svg+xml</format>
<type/>
</Work>
</RDF>
</metadata>
<rect style="opacity:0.92000002;fill:none;fill-opacity:1;stroke:#000000;stroke-width:1.00288939;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" id="rect2473" width="172.33044" height="88.997108" x="419.00143" y="315.00143" rx="0.30000001" ry="0.30000001"/>
</svg>