[Home] [By Thread] [By Date] [Recent Entries]
This turned out to be easier than I thought, so I could do it before leaving.
At 2012-08-21 13:38 +0000, Kerry, Richard wrote: I can help if you don't mind using the following notation using grouping parentheses: <group id="group-3">
<alarm equipment="MDU X([0-9]{4}) Relay fail"/>
<alarm equipment="MDU X([0-9]{4}) Fuse fail"/>
</group>The result would be changed to add the following : Wouldn't that be found-group="2"? I hope the example below helps. . . . . . . . . Ken ~/t/ftemp $ cat groups.xml
<groups>
<group id="group-1">
<alarm equipment="Frame 1 PSU 1"/>
<alarm equipment="Frame 1 PSU 2"/>
<alarm equipment="Fan Tray 1"/>
</group>
<group id="group-2">
<alarm equipment="1 Alarm"/>
<alarm equipment="2 Alarm"/>
<alarm equipment="3 Alarm"/>
</group>
<group id="group-3">
<alarm equipment="MDU X([0-9]{4}) Relay fail"/>
<alarm equipment="MDU X([0-9]{4}) Fuse fail"/>
</group></groups>~/t/ftemp $
~/t/ftemp $ cat robert.xml
<areas>
<area name="LAR 23">
<alarm equipment="1 Alarm"/>
<alarm equipment="3 Alarm"/>
<alarm equipment="MDU X2301 Relay fail"/>
<alarm equipment="2 Alarm"/>
<alarm equipment="MDU X2301 Fuse fail"/>
</area>
<area name="LAR 41">
<alarm equipment="MDU X4107 Relay fail"/>
<alarm equipment="MDU X4107 Fuse fail"/>
<alarm equipment="MDU X4108 Relay fail"/>
<alarm equipment="MDU X4108 Fuse fail"/>
<alarm equipment="Frame 1 PSU 1"/>
<alarm equipment="Frame 1 PSU 2"/>
<alarm equipment="Fan Tray 1"/>
</area>
<area name="LAR 51">
<alarm equipment="1 Alarm"/>
<alarm equipment="3 Alarm"/>
<alarm equipment="Frame 1 PSU 1"/>
<alarm equipment="Frame 1 PSU 2"/>
<alarm equipment="Fan Tray 1"/>
</area>
<area name="LAR 53">
<alarm equipment="1 Alarm"/>
<alarm equipment="2 Alarm"/>
<alarm equipment="Rack 5308 Power Fail Alarm"/>
<alarm equipment="Rack 5309 Power Fail Alarm"/>
<alarm equipment="3 Alarm"/>
</area>
<area name="LAR63">
<alarm equipment="MDU X6311 Relay fail"/>
<alarm equipment="MDU X6311 Fuse fail"/>
</area>
</areas>~/t/ftemp $
~/t/ftemp $ xslt2 robert.xml robert.xsl<?xml version="1.0" encoding="UTF-8"?><areas> <area name="LAR 23"> <alarm equipment="1 Alarm" found="group-2"/> <alarm equipment="3 Alarm" found="group-2"/> <alarm equipment="MDU X2301 Relay fail" found="group-3" found-group="1" found-key="2301"/> <alarm equipment="2 Alarm" found="group-2"/> <alarm equipment="MDU X2301 Fuse fail" found="group-3" found-group="2" found-key="2301"/> </area> <area name="LAR 41"> <alarm equipment="MDU X4107 Relay fail" found="group-3" found-group="1" found-key="4107"/> <alarm equipment="MDU X4107 Fuse fail" found="group-3" found-group="2" found-key="4107"/> <alarm equipment="MDU X4108 Relay fail" found="group-3" found-group="1" found-key="4108"/> <alarm equipment="MDU X4108 Fuse fail" found="group-3" found-group="2" found-key="4108"/> <alarm equipment="Frame 1 PSU 1" found="group-1"/> <alarm equipment="Frame 1 PSU 2" found="group-1"/> <alarm equipment="Fan Tray 1" found="group-1"/> </area> <area name="LAR 51"> <alarm equipment="1 Alarm" found="group-2"/> <alarm equipment="3 Alarm" found="group-2"/> <alarm equipment="Frame 1 PSU 1" found="group-1"/> <alarm equipment="Frame 1 PSU 2" found="group-1"/> <alarm equipment="Fan Tray 1" found="group-1"/> </area> <area name="LAR 53"> <alarm equipment="1 Alarm" found="group-2"/> <alarm equipment="2 Alarm" found="group-2"/> <alarm equipment="Rack 5308 Power Fail Alarm"/> <alarm equipment="Rack 5309 Power Fail Alarm"/> <alarm equipment="3 Alarm" found="group-2"/> </area> <area name="LAR63"> <alarm equipment="MDU X6311 Relay fail" found="group-3" found-group="1" found-key="6311"/> <alarm equipment="MDU X6311 Fuse fail" found="group-3" found-group="2" found-key="6311"/> </area> </areas>~/t/ftemp $ ~/t/ftemp $ cat robert.xsl <?xml version="1.0" encoding="US-ASCII"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> <xsl:variable name="groupedAlarms"
select="doc('groups.xml')/groups/group/alarm"/><xsl:template match="alarm">
<xsl:copy>
<xsl:apply-templates select="@*"/>
<xsl:variable name="thisAlarm" select="."/>
<xsl:for-each select="$groupedAlarms
[matches($thisAlarm/@equipment,@equipment)]">
<xsl:attribute name="found" select="../@id"/>
<xsl:variable name="thisGroupedAlarm" select="."/>
<xsl:analyze-string select="$thisAlarm/@equipment"
regex="{$thisGroupedAlarm/@equipment}">
<xsl:matching-substring>
<xsl:for-each select="regex-group(1)[normalize-space(.)]">
<xsl:attribute name="found-group">
<xsl:number select="$thisGroupedAlarm"/>
</xsl:attribute>
<xsl:attribute name="found-key" select="."/>
</xsl:for-each>
</xsl:matching-substring>
</xsl:analyze-string>
</xsl:for-each>
</xsl:copy>
</xsl:template><xsl:template match="@*|node()"><!--identity for all other nodes-->
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template></xsl:stylesheet>~/t/ftemp $
|

Cart



