我有一個定義爲contract-first的SOAP Web服務 - 請求和響應xml由xsds定義,它使用多個不同的名稱空間,並且定義了100個元素在xsds中。但是,Web服務調用了不使用xml中的名稱空間的遺留圖層。因此,我在Web服務和使用xslt轉換請求和響應xml的傳統層之間有一個轉換層。在轉換層的方式中,使用xslt從請求xml中刪除命名空間前綴,因爲只有少量的命名空間前綴要與之匹配,所以可以正常工作。如何使用xslt將名稱空間添加到xml
但是在出路上,我需要一個xslt,將命名空間前綴添加回響應中,我不知道如何執行此操作。響應可能由幾十種不同的元素類型組成;它們可能屬於xsds中幾個不同名稱空間之一。例如,我可能有這樣的迴應:
<order>
<item name="table"/>
<customer name="jim"/>
</order>
我需要轉換成這樣:
<order
xmlns:types1="http://types1.company.com" xmlns:types2="http://types2.company.com">
<types1:item name="table"/>
<types2:customer name="jim"/>
</order>
是做到這一點的唯一方法是有一個大的表中相匹配的XSLT響應中的元素名稱(例如「item」,「customer」)與應使用的前綴相對應?
或者將xsd中加載的代碼作爲xml加載,然後將響應元素與xsd中的元素進行匹配並以這種方式派生出正確的名稱空間會更好?
如何確定在多個命名空間中出現相同名稱時要使用哪個命名空間? – 2009-12-03 18:38:43
是的,這是一個潛在的問題,我不知道它是否是我們擁有的xsds的實際問題。如果確實發生,我可能會訴諸檢查祖先元素,直到我得到一個獨特的匹配。 – Polyfun 2009-12-04 16:00:24