Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 383087
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 12, 20262026-05-12T15:14:55+00:00 2026-05-12T15:14:55+00:00

I have an xml document that I am transforming with xslt into an xsl-fo

  • 0

I have an xml document that I am transforming with xslt into an xsl-fo document. I have this tricky problem I’ve been trying to track down a solution to for a long time…

In my source xml I have a few tags interspersed throughout. I want to format these as underline in the resulting document, however I have not been able to do so.

I’m trying using code like this:

<xsl:template match="//em">
  <fo:inline text-decoration="underline">
    <xsl:apply-templates select="*|text()"/>
  </fo:inline>
</xsl:template>

The full XSLT looks like this:

<xsl:stylesheet 
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:fo="http://www.w3.org/1999/XSL/Format"
  version="1.0">



  <!-- match em tags -->
  <xsl:template match="//em">
    <fo:inline text-decoration="underline">
      <xsl:apply-templates select="*|text()"/>
    </fo:inline>
  </xsl:template>
  <xsl:template match="//u">
    <fo:inline text-decoration="underline">
      <xsl:apply-templates select="*|text()"/>
    </fo:inline>
  </xsl:template>

  <!-- match b tags -->
  <xsl:template match="//b">
    <fo:inline font-weight="bold">
      <xsl:apply-templates select="*|text()"/>
    </fo:inline>
  </xsl:template>

  <xsl:template match="//br">
    <fo:block><xsl:text>&#xA;</xsl:text></fo:block>
  </xsl:template>

  <xsl:template match="briefs">
    <fo:root>
      <fo:layout-master-set>
        <fo:simple-page-master master-name="Evidence" page-width="8.5in" page-height="11in" margin="1in">
          <fo:region-body margin-bottom=".5in" margin-top=".5in" region-name="xsl-region-body" />
          <fo:region-before extent="1em" region-name="xsl-region-before" />
          <fo:region-after extent="1em" region-name="xsl-region-after" />
        </fo:simple-page-master>
      </fo:layout-master-set>
      <xsl:for-each select="brief">
        <fo:page-sequence master-reference="Evidence">
        <fo:static-content flow-name="xsl-region-before" font-family="Times">
           <fo:block font-size="10pt" text-align="center" color="#666666">
            <fo:inline font-style="italic"><xsl:value-of select="title"/></fo:inline> by <xsl:value-of select="author"/>
           </fo:block>
        </fo:static-content>

        <fo:static-content flow-name="xsl-region-after" font-family="Times" font-size="10pt">
          <fo:table>
            <fo:table-column />
            <fo:table-column column-width="1in" />
            <fo:table-body>
              <fo:table-row>
                <fo:table-cell>
                  <fo:block text-align="left" color="#666"><xsl:value-of select="copyright"/></fo:block>
                </fo:table-cell>
                <fo:table-cell>
                  <fo:block text-align="right" font-weight="bold">
                    Page <fo:page-number/>
                  </fo:block>
                </fo:table-cell>
              </fo:table-row>
            </fo:table-body>
          </fo:table>
        </fo:static-content>

        <fo:flow flow-name="xsl-region-body" font-family="Times">
          <fo:block font-size="14pt" text-align="center" text-transform="uppercase" border-before-width="2pt" border-before-color="black" border-before-style="double" border-after-width="1pt" border-after-color="black" border-after-style="solid" background-color="#ccc">
            <xsl:value-of select="title"/>
           </fo:block>

          <xsl:for-each select="heading">
            <xsl:choose>
              <xsl:when test="@level = 2">
                <fo:block font-size="11pt" font-weight="bold" keep-with-next="always" text-transform="uppercase" padding-before="1em">
                  <xsl:value-of select="title"/></fo:block>
              </xsl:when>
              <xsl:when test="@level = 3">
                <fo:block font-size="10pt" font-weight="normal" keep-with-next="always" text-transform="uppercase" padding-before="1em">
                  <xsl:value-of select="title"/></fo:block>
              </xsl:when>
              <xsl:otherwise>
                <fo:block font-size="12pt" font-weight="bold" keep-with-next="always" text-transform="uppercase" padding-before="1em">
                  <xsl:value-of select="title"/></fo:block>
              </xsl:otherwise>
            </xsl:choose>

            <xsl:for-each select="content/item">
              <xsl:choose>
                <xsl:when test="@type = 'card'">
                  <!--Print the taglines-->
                  <fo:block font-size="10pt" font-weight="bold" padding-before="1em" keep-with-next="always">
                    <!--<xsl:number value="position()" format="1" />. -->
                    <xsl:value-of select="tagline"/>
                  </fo:block>

                  <!--Print the citation-->
                  <fo:block font-size="10pt" font-style="italic" keep-with-next="always" keep-together.within-page="always" margin-left=".25in" padding-before=".5em">
                    <!--<xsl:number value="position()" format="1" />. -->
                    <xsl:value-of select="citation" disable-output-escaping="yes" />
                  </fo:block>

                  <!--Print the body-->
                  <fo:block font-size="10pt" keep-together.within-page="always" margin-left=".25in" padding-before=".5em">
                    <!--<xsl:number value="position()" format="1" />. -->
                    <xsl:value-of select="quote" disable-output-escaping="yes" />
                  </fo:block>

                </xsl:when>
                <xsl:otherwise>
                  <fo:block font-size="10pt" padding-before=".5em"><xsl:value-of select="."/></fo:block>
                </xsl:otherwise>
              </xsl:choose>
            </xsl:for-each>

          </xsl:for-each>


        </fo:flow>

      </fo:page-sequence>
      </xsl:for-each>
    </fo:root>
  </xsl:template>

</xsl:stylesheet>

Does anyone have any ideas?
Thanks so much!!!!!

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-12T15:14:55+00:00Added an answer on May 12, 2026 at 3:14 pm

    It isn’t clear to me where your code is to actually “go wild” with the document – i.e. run the matches. If <briefs> is the root node, then I would expect to see some <xsl:apply-templates select="*"/> or similar at some point; otherwise you are only going to get the output as specified in the root match (and it will never apply your <em> etc matches).

    If you want to process the entire document using substitutions only when defined, then the classic match is something like:

    <xsl:template match="@* | node()">
        <xsl:copy>
            <xsl:apply-templates select="@* | node()"/>
        </xsl:copy>
    </xsl:template>
    

    Because this matches all nodes, and cascades, it runs for every node until a more specific match is found. So with the xslt:

    <xsl:template match="@* | node()">
      <xsl:copy>
        <xsl:apply-templates select="@* | node()"/>
      </xsl:copy>
    </xsl:template>
    <xsl:template match="bar">
      <BAR/>
    </xsl:template>
    

    Most nodes will be repeated “as is”, but any <bar> elements will be replaced with <BAR/> (and without any attributes/content).

    Note that even with this; you need to explicitly cascade if you expect child data to be processed by matches (as shown by the <bar> example above, which doesn’t cascade). And I can’t see any <xsl:apply-templates> in your <briefs> match.

    Finally; the match="//em" is redundant; match="em" should suffice.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I have an XML document that I'm transforming using XSL and then spitting out
I have an xml document that I am trying to style with xsl. The
I have an XML document that I'm trying to search through. The Main structure
I have an xml document that looks like this. <foo> <bar type=artist/> Bob Marley
I have an XML document that matches our site navigation something like this: <page
This is a tough one to google for. I have an XML document that's
I am transforming some XML data to fit into document that is in a
I have an XML document that looks like this: <?xml version=1.0 encoding=UTF-8?> <xs:msgdata xmlns:xs=http://www.myCompany.com
I have an XML document that looks like this <Elements> <Element> <DisplayName /> <Type
I have an XML document that models this hierarchy of tasks: 1 Customer 1.1

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.