XMLをePubに変換するためのパッケージを作成しました。空の名前空間(xmlns=""
)ノードが結果ドキュメントに書き込まれる場合を除いて、すべて正常に動作します。変換の前に、主セグメント(すなわち、meta
,など)を保持するための一時変数を準備し、最後にノード(xsl:copy-of[@copy-namespaces='no']
を使用)をresult-documentにコピーしました。また@exclude-result-prefixes='ns_list_sep_by_space'
をxsl:transform
の要素内に使用しても、依然として望ましい結果を得ることができませんでした。 XSLを使用している場合空白/空白の名前空間宣言がresult-document内で生成されています
:
酸素IDEは言ってポップアップでメッセージを示しても、彼らはコピーを指定することにより、除外されない限り、オリジナルの要素ノードからコピーされた名前空間ノードを持つことになり、新たな要素をコピーします-namespaces = "no"この属性が省略された場合、または値がyesの場合、元の要素のすべての名前空間ノードが新しい要素にコピーされます。値がnoの場合は、名前空間ノードは何もコピーされません。ただし、名前空間固定化プロセスの要求に従って、名前空間ノードは依然として結果ツリーに作成されます。ここで
私の問題のいくつかの詳細は次のとおりです。
メインのスタイルシート:
main.xsl:main caller
<?xml version="1.0" encoding="UTF-8"?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xd="http://www.oxygenxml.com/ns/doc/xsl"
xmlns:cylian="local-ns-for-extension-functions"
exclude-result-prefixes="xs xd cylian"
version="2.0">
<xsl:import href="modules/core.xsl"/>
<xsl:variable name="base" select="base-uri()" as="xs:anyURI"/>
<xsl:template match="/">
<xsl:call-template name="procA"/>
</xsl:template>
</xsl:transform>
メインのスタイルシート:
core.xsl: core processing unit
<?xml version="1.0" encoding="UTF-8"?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xd="http://www.oxygenxml.com/ns/doc/xsl"
xmlns:cylian="local-ns-for-extension-functions"
exclude-result-prefixes="xs xd cylian"
version="2.0">
<xsl:import href="sub1.xsl"/>
<xsl:import href="sub2.xsl"/>
<!--and more-->
<!-- variable to hold intermediate results for stage1 -->
<xsl:variable name="stage1">
<cylianz>
<xsl:copy-of select="$a" copy-namespaces="no"/>
<xsl:copy-of select="$b" copy-namespaces="no"/>
<!--and more-->
</cylianz>
</xsl:variable>
<!-- variable to hold intermediate results for stage2 -->
<xsl:variable name="stage2">
<cylianz>
<xsl:for-each select="$stage1//cylian">
<xsl:sort select="@pos"/>
<xsl:sequence select="."/>
</xsl:for-each>
</cylianz>
</xsl:variable>
<xsl:template name="procA">
<xsl:for-each select="$stage2//cylian">
<xsl:result-document href="{concat($outdir,@href)}" format="general">
<xsl:call-template name="procB">
<xsl:with-param name="context" select="."/>
<xsl:with-param name="title">
<xsl:value-of select="$book_title"/>
</xsl:with-param>
</xsl:call-template>
</xsl:result-document>
</xsl:for-each>
</xsl:template>
<xsl:template name="procB">
<xsl:param name="context"/>
<xsl:param name="title"/>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<xsl:call-template name="header">
<xsl:with-param name="title" select="$title"/>
</xsl:call-template>
</head>
<body>
<div id="root">
<xsl:apply-templates select="."/>
</div>
</body>
</html>
</xsl:template>
<!--
1/ other rules are shortened for clarity
2/ declaration «xmlns:cylian='local-ns-for-extension-functions'» has to retain, some parts of transformation uses some extension functions from that namespace
-->
</xsl:transform>
a.html
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta xmlns="" http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title xmlns="">BookTitle</title>
<!--
2012.04.16 - 18:27:36 [XSLT processor: SAXON 9.1.0.5 from Saxonica]
-->
<link xmlns="" href="isbn.css" type="text/css" rel="stylesheet"/>
</head>
<body>
<div id="root">
<div xmlns="" id="a1">
<!--...-->
</div>
</div>
</body>
</html>
私は問題が起こっているのですかを理解しやすくなるでしょう願っています:
、ここでは出力です。すべての提案は大歓迎です。前もって感謝します。
Cylianは、あなたは 'のxmlns =" HTTPを配置する必要があります。XHTML要素を作成するすべてのスタイルシートモジュールの 'xsl:stylesheet'要素の' xsl:stylesheet'要素に 'org/1999/xhtml' 'を置き換えます。 –
この質問は原則的には良いですが、 xml/xslを最小限の例にしてください – oberlies