我有兩個內容幾乎相同的 xml(差異取決于生成該 xml 的 Java 物件)。
xml X:
<responseXXXXcontent>
<contentonedeep>
<contenttwodeep>
<finalcontentXXXX>
<name>zzz</name>
</finalcontentXXXX>
</ontenttwodeep>
</contentonedeep>
</responseXXXXcontent>
xml Y:
<responseYYYYcontent>
<contentonedeep>
<contenttwodeep>
<finalcontentYYYY>
<name>zzz</name>
</finalcontentYYYY>
</ontenttwodeep>
</contentonedeep>
</responseYYYYcontent>
如您所見,樹標記(標記名稱)的唯一區別在于,在 xml X 中我們有“XXXX”子字串,而在 xml Y 中我們有“YYYY”子字串。
我需要的是造句,在那里我可以從這兩個不同的 xml 中讀取所有內容,而不必擔心它是否接收 xml X 或 xml Y 并僅使用一個 xslt。我正在考慮使用 ixsl:if 陳述句和 xsl:choose 的東西,但我的想法沒有奏效。我敢打賭,有一些花哨的語法可以讓我這樣做,比如:
<xsl:if test=node[@substring].equals("X/Y")>
<xsl:apply-templates select=CHILD_OF_CURRENT_NODE>
</xsl:apply-templates>
</xsl:if>
如果它進入 xslt,我是新手,所以我將不勝感激任何幫助,謝謝!
編輯:在這種情況下,我需要的輸出是:
zzz
作為“名稱”內容,獨立于輸入。
我正在使用 XSLT 1.0 版;)
uj5u.com熱心網友回復:
恕我直言,最簡單的解決方案是將名稱可以更改的元素稱為兩個變體的聯合 - 例如:
<xsl:template match="responseXXXXcontent|responseYYYYcontent">
<!-- ... -->
</xsl:template>
或者:
<xsl:apply-templates select="finalcontentXXXX|finalcontentYYYY"/>
uj5u.com熱心網友回復:
使用@michael.hor257k 建議的聯合運算式和模式當然是一種方法。
但是,我發現如果您有多個 XML 詞匯表的變體,在應用主要轉換之前將每個檔案預處理為標準形式,通常會更簡潔。這避免了使您的主要轉換的邏輯復雜化(隨著更多變體的出現,它會變得像亂七八糟的一樣),并且預處理代碼是可重用的 - 它可以應用于任何處理管道。
對于您提到的特定情況,還有另一種方法可能不會立即顯而易見。您可以通過使用替換組來定義一個適應這兩種結構的模式,然后在模式感知轉換中,您可以使用語法選擇替換組中的任何元素element(subst-group-name)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/512787.html
標籤:xmlxslt转换
