我有一個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 xpath和默認名稱空間
- 2. XML默認命名空間問題
- 3. 讀取XML默認命名空間
- 4. 拆分XML節點
- 5. Python,XML和多個「分層」默認名稱空間
- 6. 將XML拆分爲多個xml文件
- 7. 將XML拆分爲多個XML
- 8. 項目的默認XML名稱空間必須是MSBuild XML名稱空間
- 9. TSQL拆分XML節點
- 10. C#拆分Xml與計數
- 11. Java拆分XML文件
- 12. 拆分的XML文件
- 13. SSIS拆分XML文本
- 14. 拆分XML到使用LXML
- 15. 將XML拆分成行(TSQL)
- 16. TSQL拆分XML屬性
- 17. 拆分成XML使用XSLT
- 18. 使用JDOM Java拆分XML
- 19. 默認值元素在XML
- 20. XML名稱空間和默認命名空間
- 21. SSIS條件拆分默認輸出
- 22. java的正則表達式拆分除了內部XML空白
- 23. 默認聲明哪些XML名稱空間?
- 24. 無法使用默認命名空間編寫XML文件
- 25. 如何使用默認名稱空間反序列化xml?
- 26. 爲openxml設置默認的xml命名空間
- 27. 如何更改爲空白XPage生成的默認XML?
- 28. 如何解析具有多個默認命名空間的XML?
- 29. XSLT在空xml標籤中設置默認值
- 30. XML中的默認命名空間導致XSLT問題
你說的空是什麼意思?將是一個0字節或一個空的根元素? – 2010-08-06 11:24:36