I'm asking for help with replacing values from two XML files using XSLT 1.0. I believe I'm close but need some guidance on fine-tuning what I've got so far.
First the problem: These two XML files are essentially the same. I'm replacing two nodes in the first file with nodes from a second file and all of its children but my current implementation is creating duplicates. I'm certain it's because my XPath is returning all of the nodes that I've given it but I don't know how to adjust the predicate so that it only replaces if it matches a sibling node - specifically the .
File 1 - Networks.xml
<?xml version="1.0" encoding="utf-8"?>
<Network_Records xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Networks.xsd">
<NetworkSwitch>
<ChannelID>A</ChannelID>
<SwitchName>OPS1</SwitchName>
<RackNumber>T5553</RackNumber>
<Elevation>A14</Elevation>
<RoomLocation>Phoenix</RoomLocation>
<NetworkSwitchConfigModule>switch_1_phx.txt</NetworkSwitchConfigModule>
<Override>false</Override>
</NetworkSwitch>
<NetworkSwitch>
<ChannelID>A</ChannelID>
<SwitchName>OPS2</SwitchName>
<RackNumber>Fill</RackNumber>
<Elevation>Fill</Elevation>
<RoomLocation>Fill</RoomLocation>
<NetworkSwitchConfigModule>switch_2_cle.txt</NetworkSwitchConfigModule>
<Override>false</Override>
</NetworkSwitch>
File 2 - Networks_2.xml
<?xml version="1.0" encoding="utf-8"?>
<Network_Records xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Networks.xsd">
<NetworkSwitch>
<ChannelID>A</ChannelID>
<SwitchName>OPS1</SwitchName>
<RackNumber>Fill</RackNumber>
<Elevation>Fill</Elevation>
<RoomLocation>Fill</RoomLocation>
<NetworkModule>
<ModuleNumber>2</ModuleNumber>
<NetworkPort>
<PortNumber>1</PortNumber>
<DeviceType>Processor</DeviceType>
<DeviceName>ASA1 (J5)</DeviceName>
</NetworkPort>
<NetworkPort>
<PortNumber>10</PortNumber>
<DeviceType>Processor</DeviceType>
<DeviceName>CWA2 (J5)</DeviceName>
</NetworkPort>
</NetworkModule>
</NetworkSwitch>
<NetworkSwitch>
<ChannelID>A</ChannelID>
<SwitchName>OPS2</SwitchName>
<RackNumber>REPLACE</RackNumber>
<Elevation>REPLACE</Elevation>
<RoomLocation>REPLACE</RoomLocation>
<NetworkModule>
<ModuleNumber>2</ModuleNumber>
<NetworkPort>
<PortNumber>1</PortNumber>
<DeviceType>Processor</DeviceType>
<DeviceName>ASA1 (J4)</DeviceName>
</NetworkPort>
<NetworkPort>
<PortNumber>10</PortNumber>
<DeviceType>Processor</DeviceType>
<DeviceName>CWA2 (J7)</DeviceName>
</NetworkPort>
</NetworkModule>
</NetworkSwitch>
</Network_Records>
My XSLT so far -
<xsl:output method="xml" indent="yes" version="1.0" encoding="utf-8" />
<xsl:variable name="tempNetworks" select="document('Networks_2.xml')"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="NetworkSwitchConfigModule">
<xsl:copy-of select="$tempNetworks/Network_Records/NetworkSwitch/NetworkModule"/>
</xsl:template>
<xsl:template match="Override">
</xsl:template>
Actual results - final.xml
<?xml version="1.0" encoding="utf-8"?>
<Network_Records xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Networks.xsd">
<NetworkSwitch>
<ChannelID>A</ChannelID>
<SwitchName>OPS1</SwitchName>
<RackNumber>T5553</RackNumber>
<Elevation>A14</Elevation>
<RoomLocation>Phoenix</RoomLocation>
<NetworkModule>
<ModuleNumber>2</ModuleNumber>
<NetworkPort>
<PortNumber>1</PortNumber>
<DeviceType>Processor</DeviceType>
<DeviceName>ASA1 (J5)</DeviceName>
</NetworkPort>
<NetworkPort>
<PortNumber>10</PortNumber>
<DeviceType>Processor</DeviceType>
<DeviceName>CWA2 (J5)</DeviceName>
</NetworkPort>
</NetworkModule>
<NetworkModule>
<ModuleNumber>2</ModuleNumber>
<NetworkPort>
<PortNumber>1</PortNumber>
<DeviceType>Processor</DeviceType>
<DeviceName>ASA1 (J4)</DeviceName>
</NetworkPort>
<NetworkPort>
<PortNumber>10</PortNumber>
<DeviceType>Processor</DeviceType>
<DeviceName>CWA2 (J7)</DeviceName>
</NetworkPort>
</NetworkModule>
</NetworkSwitch>
<NetworkSwitch>
<ChannelID>A</ChannelID>
<SwitchName>OPS2</SwitchName>
<RackNumber>REPLACE</RackNumber>
<Elevation>REPLACE</Elevation>
<RoomLocation>REPLACE</RoomLocation>
<NetworkModule>
<ModuleNumber>2</ModuleNumber>
<NetworkPort>
<PortNumber>1</PortNumber>
<DeviceType>Processor</DeviceType>
<DeviceName>ASA1 (J5)</DeviceName>
</NetworkPort>
<NetworkPort>
<PortNumber>10</PortNumber>
<DeviceType>Processor</DeviceType>
<DeviceName>CWA2 (J5)</DeviceName>
</NetworkPort>
</NetworkModule>
<NetworkModule>
<ModuleNumber>2</ModuleNumber>
<NetworkPort>
<PortNumber>1</PortNumber>
<DeviceType>Processor</DeviceType>
<DeviceName>ASA1 (J4)</DeviceName>
</NetworkPort>
<NetworkPort>
<PortNumber>10</PortNumber>
<DeviceType>Processor</DeviceType>
<DeviceName>CWA2 (J7)</DeviceName>
</NetworkPort>
</NetworkModule>
</NetworkSwitch>
</Network_Records>
Expected results - final.xml
<?xml version="1.0" encoding="utf-8"?>
<Network_Records xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Networks.xsd">
<NetworkSwitch>
<ChannelID>A</ChannelID>
<SwitchName>OPS1</SwitchName>
<RackNumber>T5553</RackNumber>
<Elevation>A14</Elevation>
<RoomLocation>Phoenix</RoomLocation>
<NetworkModule>
<ModuleNumber>2</ModuleNumber>
<NetworkPort>
<PortNumber>1</PortNumber>
<DeviceType>Processor</DeviceType>
<DeviceName>ASA1 (J5)</DeviceName>
</NetworkPort>
<NetworkPort>
<PortNumber>10</PortNumber>
<DeviceType>Processor</DeviceType>
<DeviceName>CWA2 (J5)</DeviceName>
</NetworkPort>
</NetworkModule>
</NetworkSwitch>
<NetworkSwitch>
<ChannelID>A</ChannelID>
<SwitchName>OPS2</SwitchName>
<RackNumber>REPLACE</RackNumber>
<Elevation>REPLACE</Elevation>
<RoomLocation>REPLACE</RoomLocation>
<NetworkModule>
<ModuleNumber>2</ModuleNumber>
<NetworkPort>
<PortNumber>1</PortNumber>
<DeviceType>Processor</DeviceType>
<DeviceName>ASA1 (J4)</DeviceName>
</NetworkPort>
<NetworkPort>
<PortNumber>10</PortNumber>
<DeviceType>Processor</DeviceType>
<DeviceName>CWA2 (J7)</DeviceName>
</NetworkPort>
</NetworkModule>
</NetworkSwitch>
</Network_Records>