Question

I have this XML

<?xml version="1.0" encoding="UTF-8"?>
<document>
<metadata>
  <field name="MyWebsite/Metadata/Keywords">marketing business</field>
  <field name="MyWebsite/Metadata/PageTitle">PageTitle1</field>
  <field name="MyWebsite/Metadata/active_url">marketing business link</field>
</metadata>
<metadata>
  <field name="MyWebsite/Metadata/Keywords">planning development</field>
 <field name="MyWebsite/Metadata/PageTitle">PageTitle2</field>
 <field name="MyWebsite/Metadata/active_url">planning development link</field>
</metadata>
<metadata>
  <field name="MyWebsite/Metadata/Keywords">learning development</field>
  <field name="MyWebsite/Metadata/PageTitle">PageTitle3</field>
  <field name="MyWebsite/Metadata/active_url">learning development link</field>
</metadata>

and my XSL code is

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
 <html>
 <body>
 <h2>Updated Tool Information:</h2>
 <table border="1">
   <xsl:for-each select="document/metadata/field">
   <tr>
   <xsl:if test = "@name = 'MyWebsite/Metadata/Keywords' and contains(.,'development')">
      <td>Page Title: <xsl:value-of select="field[@name = 'MyWebsiteMetadata/PageTitle']"/></td>
      <td>URL: <xsl:value-of select="field[@name = 'MyWebsiteMetadata/active_url']"/>    </td>
   </xsl:if>      
   </tr>
   </xsl:for-each>
  </table>
  </body>
  </html>
</xsl:template>

My goal is to have a string match with 'development' for example and the page will display the Page title and URL only.

My expected results should display like this -

  1. Page Title: PageTitle2 URL: planning development link
  2. Page Title: PageTitle3 URL: learning development link

Unfortunately, the code above is not displaying anything, it's blank.

Was it helpful?

Solution

Instead of

   <xsl:for-each select="document/metadata/field">
   <tr>
   <xsl:if test = "@name = 'MyWebsite/Metadata/Keywords' and contains(.,'development')">
      <td>Page Title: <xsl:value-of select="field[@name = 'MyWebsiteMetadata/PageTitle']"/></td>
      <td>URL: <xsl:value-of select="field[@name = 'MyWebsiteMetadata/active_url']"/>    </td>
   </xsl:if>      
   </tr>
   </xsl:for-each>

you want

   <xsl:for-each select="document/metadata[field[@name = 'MyWebsite/Metadata/Keywords' and contains(.,'development')]]">
   <tr>

      <td>Page Title: <xsl:value-of select="field[@name = 'MyWebsiteMetadata/PageTitle']"/></td>
      <td>URL: <xsl:value-of select="field[@name = 'MyWebsiteMetadata/active_url']"/>    </td>

   </tr>
   </xsl:for-each>
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top