Can anyone tell me why my generated HTML is not working with this XSLT - xslt

I have the below XSLT, but when it runs, it creates the below HTML. The problem is with the two tables. The LinesFOC elements appear within the first table instead of the second table as per the XSLT.
<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>Order Received</h2>
<table border="1">
<tr>
<th>Outlet</th>
<td><xsl:value-of select="Order/Outlet/Name"/></td>
</tr>
<tr>
<th>House Name / Number</th>
<td><xsl:value-of select="Order/Outlet/HouseNameNumber"/></td>
</tr>
<tr>
<th>Street Name</th>
<td><xsl:value-of select="Order/Outlet/Street1"/></td>
</tr>
<tr>
<th></th>
<td><xsl:value-of select="Order/Outlet/Street2"/></td>
</tr>
<tr>
<th></th>
<td><xsl:value-of select="Order/Outlet/Street3"/></td>
</tr>
<tr>
<th>Suburb</th>
<td><xsl:value-of select="Order/Outlet/Suburb"/></td>
</tr>
<tr>
<th>Town</th>
<td><xsl:value-of select="Order/Outlet/Town"/></td>
</tr>
<tr>
<th>County</th>
<td><xsl:value-of select="Order/Outlet/County"/></td>
</tr>
<tr>
<th>Postcode</th>
<td><xsl:value-of select="Order/Outlet/Postcode"/></td>
</tr>
<tr>
<th>Telephone Number</th>
<td><xsl:value-of select="Order/Outlet/TelephoneNumber"/></td>
</tr>
<tr>
<th>Contact Name</th>
<td><xsl:value-of select="Order/Outlet/ContactName"/></td>
</tr>
<tr>
<th>UWG Account Number</th>
<td><xsl:value-of select="Order/Outlet/UWGAccountNumber"/></td>
</tr>
<tr>
<th>Cash or Credit</th>
<td><xsl:value-of select="Order/Outlet/CashOrCredit"/></td>
</tr>
<tr>
<th>Order Date</th>
<td><xsl:value-of select="Order/Date"/></td>
</tr>
<tr bgcolor="#9acd32">
<th>Qty</th>
<th>Description</th>
</tr>
<xsl:for-each select="Order/Lines/LineItem">
<tr>
<td><xsl:value-of select="Qty"/></td>
<td><xsl:value-of select="Description"/></td>
</tr>
</xsl:for-each>
</table>
<table border="1">
<tr bgcolor="#9acd32">
<td></td>
<td>Free of Charge Items</td>
</tr>
<xsl:for-each select="Order/LinesFOC/LineItem">
<tr>
<td><xsl:value-of select="Qty"/></td>
<td><xsl:value-of select="Description"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
The generated HTML is
<table class="MsoNormalTable" border="1" cellpadding="0">
<tbody>
<tr>
<td style="padding:.75pt .75pt .75pt .75pt">
<p class="MsoNormal" align="center" style="text-align:center"><b>Outlet </b></p>
</td>
<td style="padding:.75pt .75pt .75pt .75pt">
<p class="MsoNormal">Test Outlet 4</p>
</td>
</tr>
<tr>
<td style="padding:.75pt .75pt .75pt .75pt">
<p class="MsoNormal" align="center" style="text-align:center"><b>House Name / Number
</b></p>
</td>
<td style="padding:.75pt .75pt .75pt .75pt">
<p class="MsoNormal">Test House</p>
</td>
</tr>
<tr>
<td style="padding:.75pt .75pt .75pt .75pt">
<p class="MsoNormal" align="center" style="text-align:center"><b>Street Name </b>
</p>
</td>
<td style="padding:.75pt .75pt .75pt .75pt">
<p class="MsoNormal">Test Street</p>
</td>
</tr>
<tr>
<td style="padding:.75pt .75pt .75pt .75pt"></td>
<td style="padding:.75pt .75pt .75pt .75pt"></td>
</tr>
<tr>
<td style="padding:.75pt .75pt .75pt .75pt"></td>
<td style="padding:.75pt .75pt .75pt .75pt"></td>
</tr>
<tr>
<td style="padding:.75pt .75pt .75pt .75pt">
<p class="MsoNormal" align="center" style="text-align:center"><b>Suburb </b></p>
</td>
<td style="padding:.75pt .75pt .75pt .75pt">
<p class="MsoNormal">Testtown</p>
</td>
</tr>
<tr>
<td style="padding:.75pt .75pt .75pt .75pt">
<p class="MsoNormal" align="center" style="text-align:center"><b>Town </b></p>
</td>
<td style="padding:.75pt .75pt .75pt .75pt">
<p class="MsoNormal">Testtown</p>
</td>
</tr>
<tr>
<td style="padding:.75pt .75pt .75pt .75pt">
<p class="MsoNormal" align="center" style="text-align:center"><b>County </b></p>
</td>
<td style="padding:.75pt .75pt .75pt .75pt">
<p class="MsoNormal">Cardiganshire</p>
</td>
</tr>
<tr>
<td style="padding:.75pt .75pt .75pt .75pt">
<p class="MsoNormal" align="center" style="text-align:center"><b>Postcode </b></p>
</td>
<td style="padding:.75pt .75pt .75pt .75pt">
<p class="MsoNormal">GU21 </p>
</td>
</tr>
<tr>
<td style="padding:.75pt .75pt .75pt .75pt">
<p class="MsoNormal" align="center" style="text-align:center"><b>Telephone Number
</b></p>
</td>
<td style="padding:.75pt .75pt .75pt .75pt"></td>
</tr>
<tr>
<td style="padding:.75pt .75pt .75pt .75pt">
<p class="MsoNormal" align="center" style="text-align:center"><b>Contact Name </b>
</p>
</td>
<td style="padding:.75pt .75pt .75pt .75pt"></td>
</tr>
<tr>
<td style="padding:.75pt .75pt .75pt .75pt">
<p class="MsoNormal" align="center" style="text-align:center"><b>UWG Account Number
</b></p>
</td>
<td style="padding:.75pt .75pt .75pt .75pt">
<p class="MsoNormal">55555555555</p>
</td>
</tr>
<tr>
<td style="padding:.75pt .75pt .75pt .75pt">
<p class="MsoNormal" align="center" style="text-align:center"><b>Cash or Credit </b>
</p>
</td>
<td style="padding:.75pt .75pt .75pt .75pt"></td>
</tr>
<tr>
<td style="padding:.75pt .75pt .75pt .75pt">
<p class="MsoNormal" align="center" style="text-align:center"><b>Order Date </b></p>
</td>
<td style="padding:.75pt .75pt .75pt .75pt">
<p class="MsoNormal">05/06/2013 00:00:00</p>
</td>
</tr>
<tr>
<td style="background:yellowgreen; padding:.75pt .75pt .75pt .75pt">
<p class="MsoNormal" align="center" style="text-align:center"><b>Qty</b></p>
</td>
<td style="background:yellowgreen; padding:.75pt .75pt .75pt .75pt">
<p class="MsoNormal" align="center" style="text-align:center"><b>Description</b></p>
</td>
</tr>
<tr>
<td style="padding:.75pt .75pt .75pt .75pt">
<p class="MsoNormal">3</p>
</td>
<td style="padding:.75pt .75pt .75pt .75pt">
<p class="MsoNormal"> Chocolate 1L (110717)</p>
</td>
</tr>
<tr>
<td style="padding:.75pt .75pt .75pt .75pt">
<p class="MsoNormal">3</p>
</td>
<td style="padding:.75pt .75pt .75pt .75pt">
<p class="MsoNormal"> Strawberry 1L (110645)</p>
</td>
</tr>
<tr>
<td style="padding:.75pt .75pt .75pt .75pt">
<p class="MsoNormal">3</p>
</td>
<td style="padding:.75pt .75pt .75pt .75pt">
<p class="MsoNormal"> Banana 1L (110656)</p>
</td>
</tr>
<tr>
<td style="padding:.75pt .75pt .75pt .75pt">
<p class="MsoNormal">3</p>
</td>
<td style="padding:.75pt .75pt .75pt .75pt">
<p class="MsoNormal"> Strawberry 1L (110645) </p>
</td>
</tr>
</tbody>
</table>
<p class="MsoNormal"><span style=""> </span></p>
<table class="MsoNormalTable" border="1" cellpadding="0">
<tbody>
<tr>
<td style="background:yellowgreen; padding:.75pt .75pt .75pt .75pt"></td>
<td style="background:yellowgreen; padding:.75pt .75pt .75pt .75pt">
<p class="MsoNormal">Free of Charge Items </p>
</td>
</tr>
</tbody>
</table>
the last item of the first table, being:
<tr>
<td style="padding:.75pt .75pt .75pt .75pt">
<p class="MsoNormal">3</p>
</td>
<td style="padding:.75pt .75pt .75pt .75pt">
<p class="MsoNormal"> Strawberry 1L (110645) </p>
</td>
</tr>
should be on the second table, but for some reason, appears in the first table.

Impossible to say for sure what's going on, in the current state of the question. The two most likely causes are these.
(1) The input (which you do not show) has
<LineItem>
<Qty>3</Qty>
<Description> Strawberry 1L (110645) </Description>
</LineItem>
appearing as a child of Lines, not as a child of LinesFOC.
(2) The stylesheet which actually produced the output (which, as hr_117 and Borodin have already pointed out, you do not show) has <xsl:for-each select="Order/Lines/LineItem"> (or the equivalent) where the stylesheet you show has <xsl:for-each select="Order/LinesFOC/LineItem">.
In other words, you appear to be looking at the wrong files.

Related

Capella XHTML tables are not properly handled by M2Doc

I am using tables in Capella descriptions and found out that M2Doc fails at handling properly merged cells.
Here is an example of what I have in a Capella description:
<table border="1" bordercolor="#000000" cellpadding="2" cellspacing="1" dir="LTR" width="172">
<tbody>
<tr>
<td colspan="1" height="19" rowspan="2" width="50%">
<p align="CENTER">test</p>
</td>
<td height="19" width="50%">
<p align="LEFT"><font face="Calibri" size="3"><font face="Calibri" size="3">c</font></font></p>
</td>
</tr>
<tr>
<td height="19" width="50%">
<p align="LEFT"><font face="Calibri" size="3"><font face="Calibri" size="3">d</font></font></p>
</td>
</tr>
<tr>
<td height="19" width="50%">
<p align="LEFT"><font face="Calibri" size="3"><font face="Calibri" size="3">a</font></font></p>
</td>
<td height="19" width="50%">
<p align="LEFT"><font face="Calibri" size="3"><font face="Calibri" size="3">e</font></font></p>
</td>
</tr>
<tr>
<td height="19" width="50%">
<p align="LEFT"><font face="Calibri" size="3"><font face="Calibri" size="3">b</font></font></p>
</td>
<td height="19" width="50%">
<p align="LEFT"><font face="Calibri" size="3"><font face="Calibri" size="3">f</font></font></p>
</td>
</tr>
</tbody>
Table in Capella
The result in Word is the following:
enter image description here
Is that a known bug? I have used an online editor (link towards XHTML tool) to check the validity of the Capella XHTML code and it is valid. Therefore, I have the feeling it is the conversion to Word that is faulty.
Thank you very much,
Stephane
Merged cells are supported by M2Doc:
https://github.com/ObeoNetwork/M2Doc/blob/4cb5e1a2d852f1ec0e678906ae3bbcee791fa418/plugins/org.obeonetwork.m2doc/src/org/obeonetwork/m2doc/element/MTable.java#L169
But it is not used by the HTML service. I opened the following issue:
https://github.com/ObeoNetwork/M2Doc/issues/460

Get verification code from a html string code using regex

I am currently writing an automation script, Where I read email Gmail through API and i am getting below html content. Now i need only code 191418 from this html content, I want to take it using regex. I tried with this
.*([0-9]{6})
To find 6 digit code but its returns 10 matchings, I am not good at regex, Can someone please help me to get the code using regex?
<div dir="ltr"><br><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr"><br></div><u></u>
<div>
<center id="m_-2051398760120817894wrapper">
<table id="m_-2051398760120817894main" width="100%">
<tbody><tr id="m_-2051398760120817894logo">
<td>
<table width="100%">
<tbody><tr>
<td>
<img src="test.com/logo.png" width="140px" alt="xxxxx Logo" style="padding:0 10px">
</td>
</tr>
</tbody></table>
</td>
</tr>
<tr>
<td height="18px"></td>
</tr>
<tr id="m_-2051398760120817894header">
<td>
<table width="100%">
<tbody><tr>
<td height="64px" style="background-color:#10069f;color:#fff;padding-left:24px;font-weight:700">Reset your password</td>
</tr>
</tbody></table>
</td>
</tr>
<tr id="m_-2051398760120817894content">
<td>
<table width="100%">
<tbody><tr>
<td style="background-color:#f6f5ff;padding:24px 24px 16px 24px">
<p style="margin-top:0">The following is the verification code required to complete your password reset.</p>
<p style="margin-bottom:24px">Enter the following verification code on the screen during the registration, and proceed to the next step.</p>
<div style="display:block;text-align:center;margin-bottom:8px;background-color:#fff;height:92px;font-weight:600;font-size:36px;line-height:92px">191418</div>
<span style="display:block;font-size:12px;color:#5d5d5d">*The verification code is valid only for 24 hours.</span>
</td>
</tr>
</tbody></table>
</td>
</tr>
<tr>
<td height="24px"></td>
</tr>
<tr id="m_-2051398760120817894footer">
<td>
<table width="100%">
<tbody><tr>
<td style="background-color:#6d7777;padding:16px 24px;font-size:12px;color:#fff">
<table width="100%">
<tbody><tr>
<td id="m_-2051398760120817894footer-left">
<span style="display:block">amnimo Inc.</span>
<span style="display:block">0-3-30 usaa-fso, xxxxxxxx-shi, Tokyo, 180-8750, Japan</span>
<span style="display:block">Phone: +81-422-52-6779</span>
<span id="m_-2051398760120817894copyright-mb" style="margin-top:16px">© 2020 <div dir="ltr"><br><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr"><br></div><u></u>
<div>
<center id="m_-2051398760120817894wrapper">
<table id="m_-2051398760120817894main" width="100%">
<tbody><tr id="m_-2051398760120817894logo">
<td>
<table width="100%">
<tbody><tr>
<td>
<img src="https://test.com/logo.png" width="140px" alt="Amnimo Logo" style="padding:0 10px">
</td>
</tr>
</tbody></table>
</td>
</tr>
<tr>
<td height="18px"></td>
</tr>
<tr id="m_-2051398760120817894header">
<td>
<table width="100%">
<tbody><tr>
<td height="64px" style="background-color:#10069f;color:#fff;padding-left:24px;font-weight:700">Reset your password</td>
</tr>
</tbody></table>
</td>
</tr>
<tr id="m_-2051398760120817894content">
<td>
<table width="100%">
<tbody><tr>
<td style="background-color:#f6f5ff;padding:24px 24px 16px 24px">
<p style="margin-top:0">The following is the verification code required to complete your password reset.</p>
<p style="margin-bottom:24px">Enter the following verification code on the screen during the registration, and proceed to the next step.</p>
<div style="display:block;text-align:center;margin-bottom:8px;background-color:#fff;height:92px;font-weight:600;font-size:36px;line-height:92px">191418</div>
<span style="display:block;font-size:12px;color:#5d5d5d">*The verification code is valid only for 24 hours.</span>
</td>
</tr>
</tbody></table>
</td>
</tr>
<tr>
<td height="24px"></td>
</tr>
<tr id="m_-2051398760120817894footer">
<td>
<table width="100%">
<tbody><tr>
<td style="background-color:#6d7777;padding:16px 24px;font-size:12px;color:#fff">
<table width="100%">
<tbody><tr>
<td id="m_-2051398760120817894footer-left">
<span style="display:block">test Inc.</span>
<span style="display:block">2-9-32 ssdsa-sss, puakano-shi, Tokyo, 000-8000, Japan</span>
<span style="display:block">Phone: +81-000-00-652</span>
<span id="m_-2051398760120817894copyright-mb" style="margin-top:16px">© 2020 amnimo Inc.</span>
</td>
<td id="m_-2051398760120817894footer-right">
<span style="display:block">© 2020 amnimo Inc.</span>
</td>
</tr>
</tbody></table>
</td>
</tr>
</tbody></table>
</td>
</tr>
</tbody></table>
</center>
</div>
</div></div> Inc.</span>
</td>
<td id="m_-2051398760120817894footer-right">
<span style="display:block">© 2020 test Inc.</span>
</td>
</tr>
</tbody></table>
</td>
</tr>
</tbody></table>
</td>
</tr>
</tbody></table>
</center>
</div>
</div></div>
You should use some DOM library that will let you query the element you want and get its content. Parsing HTML with regex is bad idea.
If you must do it, getting six numbers is not enough - after inspecting, I see that it's div content. So I would write something among the lines:
<div[^>]*>\d{6}<\/div>
Pattern explanation:
<div - match <div literally
[^>]* - match zero or more characters other from >
> - match > literally
\d{6} - match 6 digits
<\/div> - match <\/div> literally
Regex demo
EDIT
In order to extract desired text, use capturing groups:
<div[^>]*>(\d{6})<\/div>
Then text in first capturing group will be your desired result.
Maybe try word boundaries, which will prevent matching inside longer numbers:
\b([0-9]{6})\b
https://regex101.com/r/dQAiHU/1/

Building a table with the values of children whose parents only have siblings with particular attribute values

I apologize for all of the code, but I couldn't eliminate any more without muddling the clarity of the question.
Suppose I have this XML:
<Dataset>
<Rec RN="FOO">
<Fld FN="ID">ID_1</Fld>
<Fld FN="OPT">0</Fld>
<Fld FN="DESCRIPTION">DESCRIPTION_1</Fld>
</Rec>
<Rec RN="BAR" RC="3">
<Fld FN="ID">ID_2</Fld>
<Fld FN="TYPE">TYPE_1</Fld>
</Rec>
<Rec RN="BAR">
<Fld FN="ID">ID_3</Fld>
<Fld FN="TYPE">TYPE_2</Fld>
</Rec>
<Rec RN="FOO">
<Fld FN="ID">ID_4</Fld>
<Fld FN="OPT">1</Fld>
<Fld FN="DESCRIPTION">DESCRIPTION_2</Fld>
</Rec>
<Rec RN="BAR" RC="3">
<Fld FN="ID">ID_5</Fld>
<Fld FN="TYPE">TYPE_4</Fld>
</Rec>
<Rec RN="BAR">
<Fld FN="ID">ID_6</Fld>
<Fld FN="TYPE">TYPE_5</Fld>
</Rec>
<Rec RN="SPAM">
<Fld FN="CLASS">CLASS_1</Fld>
</Rec>
</Dataset>
And the following XSLT:
<?xml version="1.0" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="Dataset">
<html>
<head>
<link rel="stylesheet" type="text/css" href="On-line Styles.css"/>
</head>
<body>
<p class="subheading">
Commands
</p>
<p>
<xsl:choose>
<xsl:when test="Rec[#RN='FOO']">
<xsl:apply-templates select="Rec[#RN='FOO']"/>
</xsl:when>
<xsl:otherwise>
None
</xsl:otherwise>
</xsl:choose>
</p>
</body>
</html>
</xsl:template>
<xsl:template match="Rec[#RN='FOO']">
<xsl:for-each select=".">
<xsl:value-of select="Fld[#FN='ID']"/>
<xsl:if test="Fld[#FN='OPT'] = 1">
(Optional)
</xsl:if>
-
<xsl:value-of select="Fld[#FN='DESCRIPTION']"/>
<p>
<xsl:choose>
<xsl:when test="../Rec[#RN='FOO']">
<table style="border-collapse: separate;" cellspacing="4" border="2"
bordercolorlight="#c0c0c0" bordercolordark="#c0c0c0">
<tr bgcolor="#C0C0C0">
<td style="width: 35%; padding: 6px;" valign="top">
<p class="Tableheader" style="margin-bottom: 0;">
<span style="font-weight: bold;">ID</span>
</p>
</td>
<td style="width: 45%; padding: 6px;" valign="top">
<p class="Tableheader" style="margin-bottom: 0;">
<span style="font-weight: bold;">TYPE</span>
</p>
</td>
</tr>
<xsl:for-each select="../Rec[#RN='BAR']">
<xsl:if test="preceding-sibling::Rec/#RN='FOO'">
<tr>
<td style="padding: 6px;" valign="top">
<p style="margin-bottom: 0;">
<xsl:choose>
<xsl:when test="Fld[#FN='ID']">
<xsl:value-of select="Fld[#FN='ID']"/>
</xsl:when>
<xsl:otherwise>
<td> </td>
</xsl:otherwise>
</xsl:choose>
</p>
</td>
<td style="padding: 6px;" valign="top">
<p style="margin-bottom: 0;">
<xsl:choose>
<xsl:when test="Fld[#FN='TYPE']">
<xsl:value-of select="Fld[#FN='TYPE']"/>
</xsl:when>
<xsl:otherwise>
<td> </td>
</xsl:otherwise>
</xsl:choose>
</p>
</td>
</tr>
</xsl:if>
</xsl:for-each>
</table>
</xsl:when>
</xsl:choose>
</p>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
I get the following output for the tables:
Table 1
<table style="border-collapse: separate;" cellspacing="4" border="2" bordercolorlight="#c0c0c0" bordercolordark="#c0c0c0">
<tr bgcolor="#C0C0C0">
<td style="width: 35%; padding: 6px;" valign="top">
<p class="Tableheader" style="margin-bottom: 0;">
<span style="font-weight: bold;">ID</span>
</p>
</td>
<td style="width: 45%; padding: 6px;" valign="top">
<p class="Tableheader" style="margin-bottom: 0;">
<span style="font-weight: bold;">TYPE</span>
</p>
</td>
</tr>
<tr>
<td style="padding: 6px;" valign="top">
<p style="margin-bottom: 0;">ID_2</p>
</td>
<td style="padding: 6px;" valign="top">
<p style="margin-bottom: 0;">TYPE_1</p>
</td>
</tr>
<tr>
<td style="padding: 6px;" valign="top">
<p style="margin-bottom: 0;">ID_3</p>
</td>
<td style="padding: 6px;" valign="top">
<p style="margin-bottom: 0;">TYPE_2</p>
</td>
</tr>
<tr>
<td style="padding: 6px;" valign="top">
<p style="margin-bottom: 0;">ID_5</p>
</td>
<td style="padding: 6px;" valign="top">
<p style="margin-bottom: 0;">TYPE_4</p>
</td>
</tr>
<tr>
<td style="padding: 6px;" valign="top">
<p style="margin-bottom: 0;">ID_6</p>
</td>
<td style="padding: 6px;" valign="top">
<p style="margin-bottom: 0;">TYPE_5</p>
</td>
</tr>
</table>
Table 2
<table style="border-collapse: separate;" cellspacing="4" border="2" bordercolorlight="#c0c0c0" bordercolordark="#c0c0c0">
<tr bgcolor="#C0C0C0">
<td style="width: 35%; padding: 6px;" valign="top">
<p class="Tableheader" style="margin-bottom: 0;">
<span style="font-weight: bold;">ID</span>
</p>
</td>
<td style="width: 45%; padding: 6px;" valign="top">
<p class="Tableheader" style="margin-bottom: 0;">
<span style="font-weight: bold;">TYPE</span>
</p>
</td>
</tr>
<tr>
<td style="padding: 6px;" valign="top">
<p style="margin-bottom: 0;">ID_2</p>
</td>
<td style="padding: 6px;" valign="top">
<p style="margin-bottom: 0;">TYPE_1</p>
</td>
</tr>
<tr>
<td style="padding: 6px;" valign="top">
<p style="margin-bottom: 0;">ID_3</p>
</td>
<td style="padding: 6px;" valign="top">
<p style="margin-bottom: 0;">TYPE_2</p>
</td>
</tr>
<tr>
<td style="padding: 6px;" valign="top">
<p style="margin-bottom: 0;">ID_5</p>
</td>
<td style="padding: 6px;" valign="top">
<p style="margin-bottom: 0;">TYPE_4</p>
</td>
</tr>
<tr>
<td style="padding: 6px;" valign="top">
<p style="margin-bottom: 0;">ID_6</p>
</td>
<td style="padding: 6px;" valign="top">
<p style="margin-bottom: 0;">TYPE_5</p>
</td>
</tr>
</table>
What I need is for each table to only display the ID and TYPE text values for only the <Rec RN="BAR">s following the <Rec RN="FOO"> and before the next <Rec RN="FOO"> or <Rec> with another #RN value. There can be 1 to n number of <Rec RN="BAR"> following a <Rec RN="FOO">. The following example shows the output I need:
Table 1
<table style="border-collapse: separate;" cellspacing="4" border="2" bordercolorlight="#c0c0c0" bordercolordark="#c0c0c0">
<tr bgcolor="#C0C0C0">
<td style="width: 35%; padding: 6px;" valign="top">
<p class="Tableheader" style="margin-bottom: 0;">
<span style="font-weight: bold;">ID</span>
</p>
</td>
<td style="width: 45%; padding: 6px;" valign="top">
<p class="Tableheader" style="margin-bottom: 0;">
<span style="font-weight: bold;">TYPE</span>
</p>
</td>
</tr>
<tr>
<td style="padding: 6px;" valign="top">
<p style="margin-bottom: 0;">ID_2</p>
</td>
<td style="padding: 6px;" valign="top">
<p style="margin-bottom: 0;">TYPE_1</p>
</td>
</tr>
<tr>
<td style="padding: 6px;" valign="top">
<p style="margin-bottom: 0;">ID_3</p>
</td>
<td style="padding: 6px;" valign="top">
<p style="margin-bottom: 0;">TYPE_2</p>
</td>
</tr>
</table>
Table 2
<table style="border-collapse: separate;" cellspacing="4" border="2" bordercolorlight="#c0c0c0" bordercolordark="#c0c0c0">
<tr bgcolor="#C0C0C0">
<td style="width: 35%; padding: 6px;" valign="top">
<p class="Tableheader" style="margin-bottom: 0;">
<span style="font-weight: bold;">ID</span>
</p>
</td>
<td style="width: 45%; padding: 6px;" valign="top">
<p class="Tableheader" style="margin-bottom: 0;">
<span style="font-weight: bold;">TYPE</span>
</p>
</td>
</tr>
<tr>
<td style="padding: 6px;" valign="top">
<p style="margin-bottom: 0;">ID_5</p>
</td>
<td style="padding: 6px;" valign="top">
<p style="margin-bottom: 0;">TYPE_4</p>
</td>
</tr>
<tr>
<td style="padding: 6px;" valign="top">
<p style="margin-bottom: 0;">ID_6</p>
</td>
<td style="padding: 6px;" valign="top">
<p style="margin-bottom: 0;">TYPE_5</p>
</td>
</tr>
</table>
If I understand this correctly (which is not at all certain), you want to do something like this:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:key name="rows" match="Rec[#RN='BAR']" use="generate-id(preceding-sibling::Rec[#RN='FOO'][1])" />
<xsl:template match="/Dataset">
<html>
<body>
<xsl:apply-templates select="Rec[#RN='FOO']"/>
</body>
</html>
</xsl:template>
<xsl:template match="Rec[#RN='FOO']">
<table border="1">
<tr>
<th>ID</th>
<th>TYPE</th>
</tr>
<xsl:apply-templates select="key('rows', generate-id())"/>
</table>
<p/>
</xsl:template>
<xsl:template match="Rec[#RN='BAR']">
<tr>
<td>
<xsl:value-of select="Fld[#FN='ID']"/>
</td>
<td>
<xsl:value-of select="Fld[#FN='TYPE']"/>
</td>
</tr>
</xsl:template>
</xsl:stylesheet>
Applied to your example input, the result will be:
<html>
<body>
<table border="1">
<tr>
<th>ID</th>
<th>TYPE</th>
</tr>
<tr>
<td>ID_2</td>
<td>TYPE_1</td>
</tr>
<tr>
<td>ID_3</td>
<td>TYPE_2</td>
</tr>
</table>
<p></p>
<table border="1">
<tr>
<th>ID</th>
<th>TYPE</th>
</tr>
<tr>
<td>ID_5</td>
<td>TYPE_4</td>
</tr>
<tr>
<td>ID_6</td>
<td>TYPE_5</td>
</tr>
</table>
<p></p>
</body>
</html>
rendered as:

Code after CFInclude seems to disappear or is not rendered

Having some issues with a ColdFusion application here. I'm trying to add in a <cfinclude template="header.cfm"/> and it renders correctly however the rest of the cf code seems to disappear, not sure if its not being rendered or just not showing up because of the cfinclude statement running. This is for a page header I'm trying to insert.
Is there a way to insert the cfincludes and have it stop so the rest of the page can process? Does my question make sense?
<table width="600" border="0" align="center" cellpadding="0" cellspacing="0">
<!-- fwtable fwsrc="header.png" fwbase="default.gif" fwstyle="Dreamweaver" fwdocid = "742308039" fwnested="1" -->
<tr>
<td><img name="grantpro" src="images/grantpro.gif" width="411" height="80" border="0" alt=""></td>
<td><img name="gpimage" src="images/gpimage.jpg" width="189" height="80" border="0" alt=""></td>
</tr>
<tr>
<td colspan="2" align="center">
<table width="599px" border="0" align="center" cellpadding="1" cellspacing="1">
<tr>
<td colspan="4"><div align="center"><font size="5"><strong>FDC Menu</strong></font></div></td>
</tr>
<td colspan="3"><strong>FDC Pending Proposals:</strong></td>
</tr>
<tr>
<td> </td>
<td colspan="2">By Applicant Name</td>
</tr>
<tr>
<td> </td>
<td colspan="2">By Grant Type</td>
</tr>
<tr>
<td> </td>
<td colspan="2"> </td>
</tr>
<tr>
<td colspan="3"><strong>FDC Funded Proposals:</strong></td>
</tr>
<tr>
<td> </td>
<td colspan="2"><strong><em>Current Year</em></strong></td>
</tr>
<tr>
<td> </td>
<td> </td>
<td>By Applicant Name</td>
</tr>
<tr>
<td> </td>
<td> </td>
<td>By Grant Type</td>
</tr>
<tr>
<td> </td>
<td colspan="2"><em><strong>Prior Years</strong></em></td>
</tr>
<tr>
<td> </td>
<td> </td>
<td>By Applicant Name </td>
</tr>
<tr>
<td> </td>
<td> </td>
<td>By Grant Type</td>
<cfinclude template="cssmenu/header.cfm"/>
</table>
<p align="center"><strong>Logout</strong></p> </td>
The following code shows where the problem is
<tr>
<td> </td>
<td> </td>
<td>By Grant Type</td>
<cfinclude template="cssmenu/header.cfm"/>
</table>
Solution 1:
This is the recommended solution
The <cfinclude> probably should be moved outside of the </table>
Solution 2:
cssmenu/header.cfm would need to finish the current table row and start an new one. This is not recommended. It is not modular at all.
</tr>
<tr>
<td colspan="3">
... Content goes here ...
</td>
</tr>
You are missing a </tr> before the <cfinclude>. Also it seems like an odd place to include a header, rather add another table row and td and include the header inside of the <td> not in between the table code as this is causing it to break.

Extract name from a html

Hello I know there are some modules in perl to extract tags from html source files but I need to extract this quicly: Name CA. THAKRAR UTSAV SUBHASH.
http://regex101.com/r/dZ8mY1/1
<b>(Name)<\/b>.*?<b>(?!<\/font>|:)(.*?)<\/b>
Try this . See demo.
http://regex101.com/r/dZ8mY1/3
Always use an HTML Parser for parsing html.
The following uses Mojo::DOM to find the value for which you're searching. For a helpful 8 minute introductory video to this module, check out Mojocast Episode 5.
use strict;
use warnings;
use Mojo::DOM;
my $dom = Mojo::DOM->new(do {local $/; <DATA>});
for my $td($dom->find('td')->each) {
next if $td->all_text ne 'Name';
my $next = $td;
while ($next = $next->next_sibling) {
last if $next->node eq 'tag' and $next->all_text !~ /^[[:punct:]\s]*$/;
}
print $next->all_text, "\n";
}
__DATA__
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Language" content="en-us">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>Member Card The Institute of Chartered Accountants of India</title>
<script language="javascript" type="text/javascript">
<!-- var win=null; function NewWindow(mypage,myname,w,h,scroll,pos){ if(pos=="random"){LeftPosition=(screen.width)?Math.floor(Math.random()*(screen.width-w)):100;TopPosition=(screen.height)?Math.floor(Math.random()*((screen.height-h)-75)):100;} if(pos=="center"){LeftPosition=(screen.width)?(screen.width-w)/2:100;TopPosition=(screen.height)?(screen.height-h)/2:100;} else if((pos!="center" && pos!="random") || pos==null){LeftPosition=0;TopPosition=20} settings='width='+w+',height='+h+',top='+TopPosition+',left='+LeftPosition+',scrollbars='+scroll+',location=no,directories=no,status=no,menubar=no,toolbar=no,resizable=no'; win=window.open(mypage,myname,settings);} // -->
</script>
<script language="JavaScript1.1">
<!-- Original: Vivek Gupta --> <!-- Begin function right(e) { if (navigator.appName == 'Netscape' && (e.which == 3 || e.which == 2)) return false; else if (navigator.appName == 'Microsoft Internet Explorer' && (event.button == 2 || event.button == 3)) { alert("Sorry, you do not have permission to right click."); return false; } return true; } document.onmousedown=right; document.onmouseup=right; if (document.layers) window.captureEvents(Event.MOUSEDOWN); if (document.layers) window.captureEvents(Event.MOUSEUP); window.onmousedown=right; window.onmouseup=right; // End -->
</script>
</head>
<body bgcolor="#ECFFFF">
<p align="center"><u><i><b><font size="5">Members Details as on
Date</font></b></i></u></p>
<hr>
<div align="right">
<table border="0" width="100%">
<tr>
<td width="13%" bgcolor="#CCCCFF"><font size="2"><b>Membership No.</b></font></td>
<td width="2%" bgcolor="#99CCFF"><font size="2"><b>:</b></font></td>
<td width="25%" bgcolor="#99CCFF"><font size="2"><b>140337, </b></font> <b><font color="#FF0000" size="3">ACTIVE</font></b></td>
<td width="8%" bgcolor="#CCCCFF"><font size="2"><b>Sex</b></font></td>
<td width="1%" bgcolor="#99CCFF"><font size="2"><b>:</b></font></td>
<td width="18%" bgcolor="#99CCFF"><font size="2"><b>M</b></font></td>
<td width="13%" bgcolor="#CCCCFF"><font size="2"><b>Date of Birth</b></font></td>
<td width="1%" bgcolor="#99CCFF"><font size="2"><b>:</b></font></td>
<td width="38%" bgcolor="#99CCFF"><font size="2"><b>30/12/1986</b></font></td>
</tr>
<tr>
<td width="13%" bgcolor="#CCCCFF"><font size="2"><b>Name</b></font></td>
<td width="2%" bgcolor="#99CCFF"><font size="2"><b>:</b></font></td>
<td width="25%" bgcolor="#99CCFF"><font size="2"><b>CA. THAKRARUTSAV SUBHASH</b></font></td>
<td width="8%" bgcolor="#CCCCFF"><font size="2"><b>Blood Grp</b></font></td>
<td width="1%" bgcolor="#99CCFF"><font size="2"><b>:</b></font></td>
<td width="18%" bgcolor="#99CCFF"><font size="2"><b>B (-)</b></font></td>
<td width="13%" bgcolor="#CCCCFF"><font size="2"><b>Enrolment Dt.</b></font></td>
<td width="1%" bgcolor="#99CCFF"><font size="2"><b>:</b></font></td>
<td width="38%" bgcolor="#99CCFF"><font size="2"><b>29/07/2011</b></font></td>
</tr>
<tr>
<td width="13%" bgcolor="#CCCCFF"><font size="2"><b>Asso. / Fellow</b></font></td>
<td width="2%" bgcolor="#99CCFF">:</td>
<td width="25%" bgcolor="#99CCFF"><font size="2"><b>ACA</b></font></td>
<td width="8%" bgcolor="#CCCCFF"><font size="2"><b>Nationality</b></font></td>
<td width="1%" bgcolor="#99CCFF"></td>
<td width="18%" bgcolor="#99CCFF"><font size="2"><b>IND</b></font></td>
<td width="13%" bgcolor="#CCCCFF"><font size="2"><b>FellowDate</b></font></td>
<td width="1%" bgcolor="#99CCFF"><font size="2"><b>:</b></font></td>
<td width="38%" bgcolor="#99CCFF"><font size="2"><b> </b></font></td>
</tr>
<tr>
<td width="13%" bgcolor="#CCCCFF"><font size="2"><b>Father's Name</b></font></td>
<td width="2%" bgcolor="#99CCFF"><font size="2"><b>:</b></font></td>
<td width="25%" bgcolor="#99CCFF"><font size="2"><b>SUBHASH THAKRAR</b></font></td>
<td width="8%" bgcolor="#CCCCFF"></td>
<td width="1%" bgcolor="#99CCFF"></td>
<td width="18%" bgcolor="#99CCFF"></td>
<td width="13%" bgcolor="#CCCCFF"><b><font size="2">COP Status</font></b></td>
<td width="1%" bgcolor="#99CCFF"><b>:</b></td>
<td width="27%" bgcolor="#99CCFF"><font size="2"><b>FULLTIME</b></font></td>
</tr>
</table>
</div>
<hr>
<div align="right">
<table border="0" width="100%">
<tr>
<td width="50%" colspan="2" bgcolor="#CCCCFF"><u><font size="2"><b>Professional Address Details</b></font></u></td>
<td width="50%" colspan="2" bgcolor="#CCCCFF"><u><font size="2"><b>Residential Address Details</b></font></u></td>
</tr>
<tr>
<td width="50%" colspan="2"></td>
<td width="50%" colspan="2"></td>
</tr>
<tr>
<td width="50%" colspan="2" bgcolor="#99CCFF"><font size="2"><b>OPP PUNJAB NATIONAL BANK</b></font></td>
<td width="50%" colspan="2" bgcolor="#99CCFF"><font size="2"><b>M/S CHATRABHUJ SAVJI & CO</b></font></td>
</tr>
<tr>
<td width="50%" colspan="2" bgcolor="#99CCFF"><font size="2"><b>SUTARWADA</b></font></td>
<td width="50%" colspan="2" bgcolor="#99CCFF"><font size="2"><b>SUTARWADA</b></font></td>
</tr>
<tr>
<td width="50%" colspan="2" bgcolor="#99CCFF"><font size="2"><b> </b></font></td>
<td width="50%" colspan="2" bgcolor="#99CCFF"><font size="2"><b> </b></font></td>
</tr>
<tr>
<td width="50%" colspan="2" bgcolor="#99CCFF"><font size="2"><b> </b></font></td>
<td width="50%" colspan="2" bgcolor="#99CCFF"><font size="2"><b> </b></font></td>
</tr>
<tr>
<td width="50%" colspan="2" bgcolor="#99CCFF"><font size="2"><b>PORBANDAR - 360575</b></font></td>
<td width="50%" colspan="2" bgcolor="#99CCFF"><font size="2"><b>PORBANDAR - 360575</b></font></td>
</tr>
<tr>
<td width="50%" colspan="2" bgcolor="#99CCFF"><font size="2"><b>INDIA</b></font></td>
<td width="50%" colspan="2" bgcolor="#99CCFF"><font size="2"><b>INDIA</b></font></td>
</tr>
<tr>
<td width="14%" bgcolor="#CCCCFF"><font size="2"><b>Tel. No.</b></font></td>
<td width="36%" bgcolor="#99CCFF"><font size="2"><b>0286-2243863</b></font></td>
<td width="14%" bgcolor="#CCCCFF"><font size="2"><b>Tel. No.</b></font></td>
<td width="34%" bgcolor="#99CCFF"><font size="2"><b>0286 2245641</b></font></td>
</tr>
<tr>
<td width="14%" bgcolor="#CCCCFF"><font size="2"><b>Fax. No.</b></font></td>
<td width="36%" bgcolor="#99CCFF"><font size="2"><b> </b></font></td>
<td width="14%" bgcolor="#CCCCFF"><font size="2"><b>Fax. No.</b></font></td>
<td width="34%" bgcolor="#99CCFF"><font size="2"><b> </b></font></td>
</tr>
<tr>
<td width="14%" bgcolor="#CCCCFF"><font size="2"><b>Mob. No.</b></font></td>
<td width="36%" bgcolor="#99CCFF"><font size="2"><b>09409059418</b></font></td>
<td width="14%" bgcolor="#CCCCFF"><font size="2"><b>Mob. No.</b></font></td>
<td width="34%" bgcolor="#99CCFF"><font size="2"><b>09409059418</b></font></td>
</tr>
<tr>
<td width="14%" bgcolor="#CCCCFF"><font size="2"><b>E-mail.</b></font></td>
<td width="36%" bgcolor="#99CCFF"><font size="2"><b>usthakrar#gmail.com</b></font></td>
<td width="14%" bgcolor="#CCCCFF"><font size="2"><b>E-mail.</b></font></td>
<td width="34%" bgcolor="#99CCFF"><font size="2"><b>usthakrar#gmail.com</b></font></td>
</tr>
</table>
</div>
<hr>
<div align="right">
<table border="0" width="100%">
<tr>
<td width="29%"><b><font color="#0000FF">Member Employment Details</font></b></td>
<td width="27%"><b><font color="#0000FF">Member Firm Association Details</font></b></td>
<td width="44%"><b><font color="#0000FF">Article / Audit (List of Student undergoing Training with details)</font></b></td>
</tr>
<tr>
<td width="29%">.</td>
<td width="27%"></td>
<td width="44%">.</td>
</tr>
<tr>
<td width="100%" colspan="3" align="center"><b><font color="#0000FF">Search Firm Registered / Approved with ICAI as on Date</font></b></td>
</tr>
</table>
</div>
<p> </p>
<hr>
<p> </p>
</body>
</html>
Outputs:
CA. THAKRARUTSAV SUBHASH