2010-08-06 61 views
2

我有一個XML傳遞給XSL,它提供了標準輸出。根據某些情況,我有可能會將XML空置一段時間。如果我們有空的XML並在XSL中獲得標準或默認輸出,是否有任何方法?空XML拆分默認XML

+0

你說的空是什麼意思?將是一個0字節或一個空的根元素? – 2010-08-06 11:24:36

回答

-1

一種方法是檢查根節點是否存在於XSL中,如果不打印出來。

但是,當我在Perl試圖tsimiliar薄腳本hung.So我認爲你必須檢查大小,然後應用XSL

-1

如果你的根標記設置的東西應該像這樣工作的空節點...

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="/"> 
    <xsl:choose> 
     <xsl:when test='*[not(*)]'> 
     Empty 
     </xsl:when> 
     <xsl:otherwise> 
     Full 
     </xsl:otherwise> 
    </xsl:choose> 
    </xsl:template> 
</xsl:stylesheet> 

...如果該文件是空的(或至少不包含根元素)你的XSLT處理器很可能會拋出和異常。

3

有什麼辦法,如果我們有空X​​ML 並獲得標準或默認了 放在XSL?

您永遠不能擁有「空XML」。

根據定義,格式良好的XML文檔必須包含頂層元素。如果將XSLT 1.0轉換應用於任何非格式良好的XML文檔,則任何兼容的XSLT 1.0處理器都必須產生錯誤,並且不會執行任何處理。

0

http://www.w3.org/TR/xpath-functions/#func-doc-available

如果FN:DOC($ URI)返回一個文件 節點,該函數返回true。如果 $ uri不是有效的xs:anyURI,則會引發 錯誤[err:FODC0005]。 否則,此函數返回 false。

而從該 功能http://www.w3.org/TR/xpath-functions/#func-doc

一種可能的處理模型如下。由URI Reference標識的資源 是 檢索的。如果檢索到的資源不是 ,則會引發錯誤 [錯誤:FODC0002]。從檢索動作產生的 的數據然後是 解析爲XML文檔,並且樹 根據 [XQuery 1.0和XPath 2.0數據模型]構建。 如果頂級媒體類型是已知的 並且是「文本」,則以如同媒體類型 是text/xml一樣的方式解析內容 ;否則,以與媒體類型 是application/xml相同的方式解析 。如果內容 無法成功解析,則會引發 錯誤[錯誤:FODC0002]。 否則,函數 的結果是生成樹的根目錄 處的文檔節點。這棵樹是 可選擇驗證對模式。

因此,它看起來像你可以做到這一點(我因爲字「一個可能的處理模式」的謹慎): 這個樣式表:

<xsl:stylesheet version="2.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:param name="pURI" select="'B.xml'"/> 
    <xsl:template match="/"> 
     <DefaultResult> 
      <xsl:if test="doc-available($pURI)"> 
       <xsl:apply-templates select="doc($pURI)/*"/> 
      </xsl:if> 
     </DefaultResult> 
    </xsl:template> 
    <xsl:template match="@*|node()"> 
     <xsl:copy> 
      <xsl:apply-templates select="@*|node()"/> 
     </xsl:copy> 
    </xsl:template> 
</xsl:stylesheet> 

與任一輸入和B.xml是一個空文檔,撒克遜輸出:

<DefaultResult/> 

而且此替代信息:

Error on line 1 column 1 of B.xml: 
    SXXP0003: Error reported by XML parser: Premature end of file. 

Altova的輸出:

<DefaultResult> 
    <Entry type="Folder"> 
     <Name/> 
     <Date/> 
     <Info> 
      <URI>B.xml</URI> 
      <Comment/> 
      <Files>0</Files> 
      <CompressedSize>0</CompressedSize> 
      <UncompressedSize>0</UncompressedSize> 
      <Ratio>0</Ratio> 
      <ContainsEncryptedFiles>false</ContainsEncryptedFiles> 
     </Info> 
    </Entry> 
</DefaultResult>