2010-10-27 82 views
0

任何試圖通過指向其命名空間使用天線House的XSL-FO擴展(這給出了一個「找不到網頁」 BTW)在一個錯誤的結果:Antenna House XSL-FO擴展無法正常工作?

The element 'root' in namespace 'http://www.w3.org/1999/XSL/Format' has invalid child element 'document-info' in namespace 'http://www.antennahouse.com/names/XSL/Extensions'. List of possible elements expected: 'layout-master-set' in namespace 'http://www.w3.org/1999/XSL/Format'.

看來,有一些類型的命名空間引用問題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

不幸的是,似乎沒有與V4的工作。 3他們的xsl格式化程序。

+0

爲了記錄,諸如「http:// www.antennahouse.com/names/XSL/Extensions」這樣的名稱空間URI不必解析任何東西。 'XML中的命名空間'Rec(https://www.w3.org/TR/REC-xml-names/#ns-decl)包括「它不是直接可用於檢索模式的目標(if任何存在)「。 (究竟它應該解決什麼問題,如果它確實解決了某個問題,那麼這是一個單獨的討論。) – 2017-04-25 07:47:33

回答

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> 

我認爲如果您爲天線室擴展交換renderx擴展名(rx:),它應該可以工作。也許你應該在嘗試使用XSL-T生成XSL-FO之前先嚐試渲染XSL-FO。

希望這會有所幫助。

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"/> 
...