0

--stringparam (xsltproc) を XSL スタイルシートの DOCTYPE に挿入するにはどうすればよいですか? --stringparam はコマンド ラインから指定します。

同じカスタマイズレイヤーで処理したいdocbook5形式の本がいくつかあり、各本には一意の識別子(ここでは「デモ」)があるため、次のようなものを実行しています

xsltproc --stringparam course.name デモ ...

本ごとに。

明らかに、パラメーターはそのようには認識されませんが、逐語的なテキストとして認識され、エラーが発生します。

警告: 外部エンティティ "http://edu.yet-another-project.com/course/$(course.name)/entities.ent" の読み込みに失敗しました

これが私が試した方法ですが、うまくいきません:

<?xml version='1.0'?>
<!DOCTYPE stylesheet [
<!ENTITY % myent SYSTEM "http://edu.yet-another-project.com/course/$(course.name)/entities.ent">
%myent;
]>
<xsl:stylesheet  
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
        version="1.0">

<!-- the docbook template used -->
<xsl:import href="http://docbook.org/ns/docbook/xhtml/chunk.xsl"/>

<!-- processor parameters -->
<xsl:param name="html.stylesheet">default.css</xsl:param>
<xsl:param name="use.id.as.filename">1</xsl:param>
<xsl:param name="chunker.output.encoding">UTF-8</xsl:param>
<xsl:param name="chunker.output.indent">yes</xsl:param>
<xsl:param name="navig.graphics">1</xsl:param>
<xsl:param name="generate.revhistory.link">1</xsl:param>
<xsl:param name="admon.graphics">1</xsl:param>

<!-- here more stuff -->
</xsl:stylesheet>

アイデア?

4

2 に答える 2

0

course.nameパラメータはXSLT プロセッサに渡されます。しかし、を含むエンティティー宣言を確認するのはXML パーサー$(course.name)であり、パーサーはそれをどう処理するかを知りません。エンティティは展開できません。

course.nameスタイルシートでパラメーターとして宣言し、カスタム テンプレートのどこかで参照する必要があります。

于 2010-12-25T20:43:48.597 に答える
0

http://www.w3.org/TR/xslt#outputから

<xsl:output
  method = "xml" | "html" | "text" | qname-but-not-ncname 
  version = nmtoken 
  encoding = string 
  omit-xml-declaration = "yes" | "no"
  standalone = "yes" | "no"
  doctype-public = string 
  doctype-system = string 
  cdata-section-elements = qnames 
  indent = "yes" | "no"
  media-type = string />

したがって、XSLT 1.0 を使用する場合、パブリックまたはシステムの DOCTYPE 文字列をパラメータ化することはできません。

http://www.w3.org/TR/xslt20/#element-result-documentから

<xsl:result-document
  format? = { qname }
  href? = { uri-reference }
  validation? = "strict" | "lax" | "preserve" | "strip"
  type? = qname
  method? = { "xml" | "html" | "xhtml" | "text" |
  qname-but-not-ncname }
  byte-order-mark? = { "yes" | "no" }
  cdata-section-elements? = { qnames }
  doctype-public? = { string }
  doctype-system? = { string }
  encoding? = { string }
  escape-uri-attributes? = { "yes" | "no" }
  include-content-type? = { "yes" | "no" }
  indent? = { "yes" | "no" }
  media-type? = { string }
  normalization-form? = { "NFC" | "NFD" | "NFKC" | "NFKD" |
  "fully-normalized" | "none" | nmtoken }
  omit-xml-declaration? = { "yes" | "no" }
  standalone? = { "yes" | "no" | "omit" }
  undeclare-prefixes? = { "yes" | "no" }
  use-character-maps? = qnames
  output-version? = { nmtoken }>
  <!-- Content: sequence-constructor -->
</xsl:result-document>

XSLT 2.0 ではxsl:result-document、そのタスクに命令を使用できます。

于 2010-12-26T16:58:11.150 に答える