0

名前空間をポイントしてAntennaHouseのxsl-fo拡張機能を使用しようとすると(「ページが見つかりません」という意味になります)、エラーが発生します。

名前空間'http://www.w3.org/1999/XSL/Format'の要素'root'に、名前空間'http://www.antennahouse.com/names/XSL/の無効な子要素'document-info'があります拡張機能'。予想される可能な要素のリスト:名前空間'http://www.w3.org/1999/XSL/Format'の'layout-master-set'。

xsl-fo名前空間の要素が拡張要素が有効な子要素であることを認識しない、ある種の名前空間参照の問題があるようです。

コードは次のようになります。

<xsl:stylesheet version='1.0'
     xmlns:xsl='http://www.w3.org/1999/XSL/Transform'
     xmlns:axf='http://www.antennahouse.com/names/XSL/Extensions'>
    <xsl:template match='/root'>
        <fo:root xmlns:fo='http://www.w3.org/1999/XSL/Format' xmlns:axf='http://www.antennahouse.com/names/XSL/Extensions'>
            <axf:document-info name='title' value='value' />
        </fo:root>
    </xsl:template>
</xsl:stylesheet>

彼らのウェブサイトにまったく同じように見える例がリストされているのはおかしいです: http ://www.antennahouse.com/xslfo/axf4-extension.htm#axf.document-info

残念ながら、xslフォーマッターのv4.3では動作していないようです。

4

3 に答える 3

2

問題は xsl-fo が完全ではないことだと思います。XML を XSL-FO に変換するときにエラーが発生しますか、それとも XSL-FO を処理するときにエラーが発生しますか?

fo:rootまた、名前空間が にある場合は、要素に名前空間を追加する必要はないと思いますxsl:stylsheet。ただし、これは XSL プロセッサに固有のものである可能性があります。(私はサクソンを使用しています。)

アンテナハウスの経験はありませんが、同様の拡張機能を持つRenderXを使用しています。

XML ファイル、XSL スタイルシート、および結果の XSL-FO の例を次に示します。(RenderX では問題なく動作します。)

XML ファイル

<?xml version="1.0" encoding="UTF-8"?>
<root/>

XSL スタイルシート

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:rx="http://www.renderx.com/XSL/Extensions">
  <xsl:output indent="yes"/>
  <xsl:strip-space elements="*"/>

  <xsl:template match="/root">
    <fo:root>
      <rx:meta-info>
        <rx:meta-field name="title" value="Some Title"/>
        <rx:meta-field name="author" value="DevNull"/>
        <rx:meta-field name="subject" value="Some Subject"/>
        <rx:meta-field name="keywords" value="abc def ghi jkl"/>
      </rx:meta-info>
      <fo:layout-master-set>
        <fo:simple-page-master master-name="my-page">
          <fo:region-body/>
        </fo:simple-page-master>
      </fo:layout-master-set>
      <fo:page-sequence master-reference="my-page">
        <fo:flow flow-name="xsl-region-body">
          <fo:block/>
        </fo:flow>
      </fo:page-sequence>
    </fo:root>
  </xsl:template>

</xsl:stylesheet>

XSL-FO出力

<?xml version="1.0" encoding="UTF-8"?>
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"
         xmlns:rx="http://www.renderx.com/XSL/Extensions">
   <rx:meta-info>
      <rx:meta-field name="title" value="Some Title"/>
      <rx:meta-field name="author" value="DevNull"/>
      <rx:meta-field name="subject" value="Some Subject"/>
      <rx:meta-field name="keywords" value="abc def ghi jkl"/>
   </rx:meta-info>
   <fo:layout-master-set>
      <fo:simple-page-master master-name="my-page">
         <fo:region-body/>
      </fo:simple-page-master>
   </fo:layout-master-set>
   <fo:page-sequence master-reference="my-page">
      <fo:flow flow-name="xsl-region-body">
         <fo:block/>
      </fo:flow>
   </fo:page-sequence>
</fo:root>

rx:renderx 拡張機能 ( ) をアンテナ ハウス拡張機能に交換すれば、うまくいくと思います。XSL-T を使用して XSL-FO を生成する前に、まず XSL-FO をレンダリングしてみてください。

お役に立てれば。

于 2010-11-05T00:34:58.013 に答える
1

focheck ( https://github.com/AntennaHouse/focheck ) リリースには、XSL 1.1 用の W3C XSD と Antenna House 拡張機能が含まれています。

于 2015-08-25T09:15:22.933 に答える
1

これは私のせいでした。知らなかった xsd スキーマ ファイルがありました。アンテナハウス拡張にアクセスするためのテンプレートを取得するために、ルート ノードとブロック ノードで「any」要素を使用する必要がありました。

<xs:element name="root">
  <xs:complexType>
    <xs:sequence>
      <xs:any namespace="http://www.antennahouse.com/names/XSL/Extensions" processContents="skip"/>
...

<xs:element name="block">
  <xs:complexType mixed="true">
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:any namespace="http://www.antennahouse.com/names/XSL/Extensions" processContents="skip"/>
...
于 2010-11-05T19:46:20.500 に答える