簡體   English   中英

XML映射 - XSLT還是代碼?

[英]XML Mapping - XSLT or Code?

最近我討論過是否使用XSLT或代碼將映射功能從一種XML格式寫入另一種XML格式,或者甚至在轉換為XML以外的其他內容時。 現在我的心態是,XSLT的目的正是針對這類事情,並且是最合適的選擇。

但是,其他人建議在需要更復雜的東西時這樣做是不合適的,例如當您需要從外部存儲庫查找數據時。 他們還建議XSLT可以像編寫代碼一樣復雜,因此否定了這個論點。 通過利用TDD和CI實踐,使用代碼解決方案可以更輕松地進行測試。

此討論的基礎是設計一個公共轉換服務,當需要任何映射時,WCF服務應該使用該服務。 例如,將傳入消息轉換為規范形式時。 我認為最好編寫此服務以針對XSLT映射執行XML消息的某些匹配。 然后,您可以輕松地放入/取出這些映射而無需重新編譯代碼,並且可以更輕松地獲取這些映射並了解代碼外部的情況。

我想知道你們有什么想法,是否有人有任何類似的經歷? 我知道我可以出去買一個產品,但寧願聽到定制的解決方案。

謝謝

首先,為了清楚起見,XSLT 代碼。 ;)它是圖靈完整的函數式編程語言。

當輸入和輸出是XML時,我通常更喜歡XSLT; 在使用通用語言進行轉換時,涉及很多鍋爐板代碼。 例外情況是輸入需要由於其大小而需要按順序處理(XSLT需要輸入和輸出的完整內存樹結構)。 此外,通過XSLT發出例如純文本是一種痛苦(主要是由於空格/換行問題)。

但是,一個有效的問題是,團隊中是否可以獲得閱讀和維護XSLT程序的技能。 如果人們不習慣功能范例,學習XSLT可能具有挑戰性(即不會在項目/公司時間發生),並且解決方案通常必須立即可供項目上的其他開發人員/維護人員閱讀。 在那種情況下,我(勉強地)去尋找通用語言解決方案。

XSLT也不會阻止單元測試; 可以通過在轉換測試用例的輸出上斷言來測試轉換。

我們編寫了一個事件驅動的數據庫集成系統,它廣泛使用XSLT來轉換XML消息。 有用於執行XSLT轉換的單元測試的框架,我們還發現能夠使用TeXSLMate調色板直接在TextMate中轉換消息,而無需重新編譯任何內容。

我認為使用XSLT的優勢在於它是一種可以在許多環境中使用的通用技術 - 例如我們也將它用作Web應用程序的模板系統 - 並且存在很好的工具。

我同意你的觀點 - XSLT旨在從一種XML格式映射到另一種格式,如果你需要從一種格式映射到另一種格式,那就是要走的路。

當你不得不采取另一種方式時,事情會變得有點少 - 幾種不同的格式需要轉換為一種規范...我已經看到嘗試在一組XSL文件中完成所有操作的嘗試閱讀或理解可怕。 我會在每次轉換時使用單個XSLT。

XSLT vs Code的一個問題是,使用XSLT,你需要在內存中使用整個XML和XSL文件進行轉換,所以如果你有大文件(megs及以上的hunderds),這可能不是最好的方法。

其他答案涵蓋了使用XSLT的原因; 我想解決有關數據庫查找的問題。

數據庫查找實際上超出了轉換范圍。 也就是說,您不再將一種XML格式轉換為另一種格式; 您包含來自外部來源的信息,這些信息不屬於您的輸入。 (我假設你的數據庫很大和/或很不穩定,以至於它無法通過document函數讀入轉換的XML文檔來表示,這是最簡單的方法。)

根據我的經驗,這最好通過預處理源XML來完成,通過一個進程運行它,然后使用數據庫中的附加信息對其進行裝飾,然后再將其傳遞給轉換。

還可以值得預處理源XML來處理XSLT無法正常處理的情況。 例如,如果XML包含由於某種原因尚未解析為可用的XML形式的字符串數據,則可能值得在預處理器中解析數據並在將XML傳遞給轉換之前更新XML。 一個很好的例子是源格式是由認為日期應該表示為MM/DD/YYYY或者布爾表示為YN 當然,您可以在XSLT中解決這個問題,但是如果您按下輸入以將值轉換為規范表示形式,然后再將其轉換為XSLT,則通常會簡化操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM