我有一個XML傳遞給XSL,它提供了標準輸出。根據某些情況,我有可能會將XML空置一段時間。如果我們有空的XML並在XSL中獲得標準或默認輸出,是否有任何方法?空XML拆分默認XML
回答
一種方法是檢查根節點是否存在於XSL中,如果不打印出來。
但是,當我在Perl試圖tsimiliar薄腳本hung.So我認爲你必須檢查大小,然後應用XSL
如果你的根標記設置的東西應該像這樣工作的空節點...
<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處理器很可能會拋出和異常。
有什麼辦法,如果我們有空XML 並獲得標準或默認了 放在XSL?
您永遠不能擁有「空XML」。
根據定義,格式良好的XML文檔必須包含頂層元素。如果將XSLT 1.0轉換應用於任何非格式良好的XML文檔,則任何兼容的XSLT 1.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>
- 1. XML默認命名空間問題
- 2. 將XML拆分爲多個XML
- 3. 項目的默認XML名稱空間必須是MSBuild XML名稱空間
- 4. 將XML拆分成行(TSQL)
- 5. 拆分的XML文件
- 6. TSQL拆分XML節點
- 7. 使用JDOM Java拆分XML
- 8. SSIS拆分XML文本
- 9. Java拆分XML文件
- 10. SSIS條件拆分默認輸出
- 11. 如何使用默認命名空間轉換XML?
- 12. XML + XPATH:使用默認命名空間的任何方式?
- 13. 是否允許多個XML默認名稱空間?
- 14. 默認聲明哪些XML名稱空間?
- 15. 默認的xml名稱空間在XAML中如何工作?
- 16. 如何使用默認名稱空間反序列化xml?
- 17. 如何爲xml命名空間設置默認值?
- 18. 默認的XML命名空間,JDOM和XPath
- 19. 默認的XML名稱空間是否需要前綴?
- 20. 創建xml文檔時的默認名稱空間
- 21. 無法使用默認名稱空間解析C#中的XML
- 22. 如何解析具有多個默認命名空間的XML?
- 23. XSLT在空xml標籤中設置默認值
- 24. 爲openxml設置默認的xml命名空間
- 25. 追加XML文檔時創建的默認名稱空間
- 26. 拆分不對稱XML爲多個個XML
- 27. 如何使用XSLT拆分XML標記
- 28. MS Word以XML格式拆分單詞
- 29. 拆分重新創建XML XSLT
- 30. 如何從MySQL表中拆分XML值?
你說的空是什麼意思?將是一個0字節或一個空的根元素? – 2010-08-06 11:24:36