我一直在尋找 StackOverflow 一段時間但沒有成功。我的目標是過濾員工 XML 檔案。輸入 XML 有大約 9000 名員工,我有多個目標系統,他們希望根據每個目標系統的不同選擇標準獲取這些員工記錄的子集。樣本輸入:
<Employees>
<Employee>
<id>1</id>
<name>Name1</name>
</Employee>
<Employee>
<id>2</id>
<name>Name2</name>
</Employee>
<Employee>
<id>3</id>
<name>Name3</name>
</Employee>
<Employee>
<id>4</id>
<name>Name4</name>
</Employee>
</Employees>
輸出應該具有相同的結構,但基于選擇標準(XPATH)減少了節點。如何將動態 XPath 傳遞給 XSLT 樣式表并將過濾后的員作業為輸出?請注意完整的 Xpath 運算式以及過濾條件作為一個字串傳遞。
期望的輸出:
<Employees>
<Employee>
<id>2</id>
<name>Name2</name>
</Employee>
<Employee>
<id>3</id>
<name>Name3</name>
</Employee>
</Employees>
uj5u.com熱心網友回復:
使用 XSLT 3.0,xsl:evaluate用于動態 XPath 評估。您可以接受 XPath 作為xsl:param(顯示一個示例默認 XPath 值),然后評估它。
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="3.0">
<xsl:output indent="yes"/>
<xsl:mode on-no-match="shallow-copy"/>
<xsl:param name="path" select="'/Employees/Employee[number(id)[. gt 1 and . lt 4]]'" />
<xsl:template match="Employees">
<xsl:copy>
<xsl:evaluate xpath="$path" context-item="."/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/383953.html
