初心者の質問で申し訳ありませんが、名前空間は私にとって本当に不可解です。
単一の XML/XSLT から多数の SVG ドキュメントを生成しようとしています。
私のスタイルシート:
<xsl:stylesheet version="2.0"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
>
<xsl:output method="xml" indent="yes" name="xml" cdata-section-elements="style"/>
<xsl:template match="/">
<xsl:apply-templates select="//root/menu"/>
</xsl:template>
<xsl:template match="menu">
<xsl:variable name="filename" select="concat(@name,'.svg')"/>
<xsl:result-document href="{$filename}" format="xml">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" baseProfile="basic" id="svg-root" width="482" height="600">
<defs>
<style type="text/css"><![CDATA[rect {
fill: white;
fill-opacity:1;
continues...
これは機能し、次の出力が生成されます。
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xs="http://www.w3.org/2001/XMLSchema" version="1.1" baseProfile="basic" id="svg-root" width="482" height="600">
<defs>
<style type="text/css"><![CDATA[rect {
fill: white;
fill-opacity:1;
continues...
しかし、計算されたコンテンツに基づいて高さと幅の属性を指定できるようにしたい
「<svg>」を <xsl:element name="svg"><xsl:attribute name="xmlns"> http://www.w3.org/2000/svg </xsl:attribute>として作成しようとしました</xsl:要素>
(xmlspy) で xmlns 属性を割り当てられないため、これは失敗します。
ルート (svg) で名前空間を指定しない場合、xmlns はルートの <svg> ノードに自動的に追加され、すべての第 1 レベルのサブノードに次のような名前空間参照が適用されます (<defs> を参照)。
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" baseProfile="basic" id="svg-root" width="482" height="600">
<defs xmlns:svg="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<style type="text/css"><![CDATA[rect {
fill: white;
fill-opacity:1;
continues...
ルート svg 要素で必要な名前空間を指定すると同時に、第 1 レベルのサブブランチで余分な名前空間を参照せずに高さと幅の値を計算するにはどうすればよいですか?