2013-04-12 29 views
4

我正試圖修改calimero中的ets4_import以匹配舊的ETS4項目和新的項目。XML轉換 - XSL模板匹配多個條件

是否有可能修改

<xsl:template match="/" xmlns:b="http://knx.org/xml/project/11"> 

喜歡的東西

<xsl:template match="/" xmlns:b="http://knx.org/xml/project/11 or http://knx.org/xml/project/10"> 

的XML文件是開始

<?xml version="1.0" encoding="utf-8"?> 
<KNX xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" CreatedBy="ETS4" ToolVersion="ETS 4.0.3 (Build 3250)" xmlns="http://knx.org/xml/project/11"> 

<?xml version="1.0"?> 
<KNX xmlns="http://knx.org/xml/project/10" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" CreatedBy="ETS4" ToolVersion="4.0.1387.12605"> 

Here是完整的XSL文件。

任何人都可以幫助我嗎?

感謝

UPDATE

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:b10="http://knx.org/xml/project/10" xmlns:b="http://knx.org/xml/project/11" > 
    <xsl:output method="xml" version="1.0" encoding="iso-8859-1" indent="yes"/> 
    <xsl:template match="/"> 
     <xsl:for-each select="b:KNX/b:Project/b:Installations/b:Installation/b:Topology"> 
      <datapoints> 
      <xsl:for-each select="b:Area/b:Line/b:DeviceInstance/b:ComObjectInstanceRefs/b:ComObjectInstanceRef"> 
       <xsl:sort select="b:Connectors/b:Send/@GroupAddressRefId"/> 
       <xsl:if test="not(preceding::b:Connectors/b:Send/@GroupAddressRefId = current()/b:Connectors/b:Send/@GroupAddressRefId)"> 
        <xsl:for-each select="b:Connectors"> 
         <xsl:variable name="verz" select="document(concat(substring(../@RefId,0,7),'/',substring-before(../@RefId, '_O'), '.xml'))/b:KNX/b:ManufacturerData/b:Manufacturer/b:ApplicationPrograms/b:ApplicationProgram/b:Static/b:ComObjectTable/b:ComObject[@Id = ../../b:ComObjectRefs/b:ComObjectRef[@Id = current()/../@RefId]/@RefId]" /> 
         <xsl:variable name="grosse"> 

是否有可能定義

b: = b: | b10: 

,這樣我就不必改變整個文件

回答

0

使用XSLT 2.0你可以先改變(或可能甚至剝離)文檔的名稱空間,然後應用您擁有的巨大模板。在XSLT 1.0中,您可以用*[local-name()='XYZ']代替b:XYZ的所有發生。

3

我想你正在尋找的是這樣的:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:b10="http://knx.org/xml/project/10" xmlns:b11="http://knx.org/xml/project/11"> 
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 
    <xsl:template match="b10:MyElement|b11:Element"> 
     <!-- Template code... --> 
    </xsl:template> 
</xsl:stylesheet> 

雖然因爲你是匹配的根元素,你一次只能轉換一個XML文檔,我不太看的問題,因爲/將在任何情況下匹配根元素。

+0

也許我做錯了什麼,但在模板匹配後,我有一個select =「b:KNX/b:Project ...」,它不再工作。 如果我有select =「b11:KNX/b11:Project ...」,它正在工作,但我想使用兩個版本。 – mickeyrourkeske

+0

然後,可能你需要的是b10:KNX/b10:Project | b11:KNX/b11:Project,但是可以肯定的是,我需要一個小而完整(非僞)的輸入XML示例,期望的輸出以及你目前擁有的結果。 – Dabbler