Subject: Re: [xsl] Pattern Matching in XSl - find groups defined in one Xml in another Xml. From: "G. Ken Holman" <gkholman@xxxxxxxxxxxxxxxxxxxx> Date: Tue, 21 Aug 2012 10:48:48 -0400 |
- Supplementary question. Can this be extended to find patterns defined using regular expressions ? eg add to the above pattern file : <group id="group-3"> <alarm equipment="MDU X[0-9]{4} Relay fail"/> <alarm equipment="MDU X[0-9]{4} Fuse fail"/> </group>
<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 :
<area name="LAR 23">
<alarm equipment="MDU X2301 Relay fail" found="group-3" found-group="1" found-key="2301" />
<alarm equipment="MDU X2301 Fuse fail" found="group-3" found-group="1" found-key="2301" />
~/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
<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>
-- Public XSLT, XSL-FO, UBL and code list classes in Europe -- Oct 2012 Contact us for world-wide XML consulting and instructor-led training Free 5-hour lecture: http://www.CraneSoftwrights.com/links/udemy.htm Crane Softwrights Ltd. http://www.CraneSoftwrights.com/s/ G. Ken Holman mailto:gkholman@xxxxxxxxxxxxxxxxxxxx Google+ profile: https://plus.google.com/116832879756988317389/about Legal business disclaimers: http://www.CraneSoftwrights.com/legal
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Pattern Matching in XSl -, G. Ken Holman | Thread | RE: [xsl] Pattern Matching in XSl -, Kerry, Richard |
Re: [xsl] Pattern Matching in XSl -, G. Ken Holman | Date | RE: [xsl] Pattern Matching in XSl -, Kerry, Richard |
Month |