XSLT - Select Node WITHOUT attribute

I want to highlight all nodes <cci:p>

that have no attribute.

So, the example below has a node (denoted in bold or **) which is causing some problems. Basically, I want to highlight all nodes <cci:p>

and output them to tags <p>

. But this node causes an additional paragraph to be output, which is not correct. In this case, what I would like to have is that if a node with this attribute is found, I want to add it to the previously processed node.

This is what I get:      

OAKLAND, Calif - A former student suspected of opening fire at a small Christian college in California, killing seven people and injuring three others, targeted a school administrator and former classmates who he believed treated him unfairly, police said yesterday.      

     

Auckland Police Chief Howard Jordan said at a press conference that one Goh, 43, had been expelled from Oikos University, collaborated with investigators      

after he was taken into custody, but did not really repent.     

We know he came here with the intention of finding an administrator, and she was not here, ”Jordan said. He then went through systematic and random shooting at the victims.      

This is what I would like to receive:      

OAKLAND, Calif - A former student suspected of opening fire at a small Christian college in California, killing seven people and injuring three others, targeted a school administrator and former classmates who he believed treated him unfairly, police said yesterday.      

     

Oakland Police Chief Howard Jordan said at a press conference that one Goh, 43, was expelled from Oikos University, cooperated with investigators after he was taken into custody, but did not particularly repent.

     

We know he came here with the intention of finding an administrator, and she was not here, ”Jordan said. He then went through systematic and random shooting at the victims.      

XML example:

<cci:body class="element" displayname="body" name="body">
    <cci:p>OAKLAND, Calif. — A former student suspected of opening fire at a small Christian college in California, killing seven people and wounding three, was targeting a school administrator and former classmates who he felt had treated him unfairly, police said yesterday.</cci:p>
    <cci:p>Oakland Police Chief Howard Jordan said at a news conference that One Goh, 43, who had been expelled from Oikos University, had been cooperative with investigators </cci:p>
    **<cci:p ccix:annotation="insertion">after being taken into custody but "not particularly remorseful."</cci:p>**
    <cci:p>"We know that he came here with the intent of locating an administrator, and she was not here," Jordan said. "He then went through the entire building systematically and randomly shooting victims."</cci:p>
    <cci:p>The midmorning attack at Oikos, a small Oakland college that has links to the Korean-American Christian community, was the deadliest shooting rampage on a U.S. college campus since </cci:p>
</cci:body>

      

XSLT example:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:cci="urn:schemas-ccieurope.com"
    xmlns:ccit="http://www.ccieurope.com/xmlns/ccimltables" xmlns:ccix="http://www.ccieurope.com/xmlns/ccimlextensions"
    exclude-result-prefixes="xsl cci ccit ccix">

    <xsl:strip-space elements="*" />
    <xsl:output method="html" encoding="UTF-8" />

    <xsl:template match="/">
        <html>
            <xsl:apply-templates />
        </html>
    </xsl:template>

    <xsl:template match="cci:p">
        <xsl:choose>
            <xsl:when test="@ccix:annotation='insertion'">
                <xsl:apply-templates />
            </xsl:when>

            <xsl:otherwise>
                <p>
                    <xsl:apply-templates />
                </p>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:template>

    <xsl:template match="cci:italic">
        <em>
            <xsl:apply-templates />
        </em>
    </xsl:template>

    <xsl:template match="cci:endnote_contrib">
        <em>
            <xsl:apply-templates />
        </em>
    </xsl:template>

    <xsl:template match="cci:extra_leading">
    </xsl:template>

    <xsl:template match="cci:bold">
        <strong>
            <xsl:apply-templates />
        </strong>
    </xsl:template>

    <xsl:template match="cci:subhead">
        <h2 class="cci-subhead">
            <xsl:value-of select="." />
        </h2>
    </xsl:template>

    <xsl:template match="ccit:table">
        <table class="cci-table">
            <xsl:apply-templates />
        </table>
    </xsl:template>

    <xsl:template match="ccit:tr">
        <tr>
            <xsl:apply-templates />
        </tr>
    </xsl:template>

    <xsl:template match="ccit:td">
        <td>
            <xsl:value-of select="." />
        </td>
    </xsl:template>

    <xsl:template match="cci:l_category">
        <h2 class="cci-category">
            <xsl:value-of select="." />
        </h2>
    </xsl:template>

    <xsl:template match="cci:l_category_sub">
        <h2 class="cci-category-sub">
            <xsl:value-of select="." />
        </h2>
    </xsl:template>

    <xsl:template match="cci:l_region">
        <h2 class="cci-region">
            <xsl:value-of select="." />
        </h2>
    </xsl:template>

    <xsl:template match="cci:l_region_location">
        <h2 class="cci-region-location">
            <xsl:value-of select="." />
        </h2>
    </xsl:template>

    <xsl:template match="cci:l_region_sub">
        <h2 class="cci-region-sub">
            <xsl:value-of select="." />
        </h2>
    </xsl:template>

    <xsl:template match="factbox_bold">
        <strong>
            <xsl:apply-templates />
        </strong>
    </xsl:template>

    <xsl:template match="cci:factbox_head">
        <strong>
            <xsl:value-of select="." />
        </strong>
    </xsl:template>

    <xsl:template match="cci:z_sym_round_bullet">
        &#8226;
        <xsl:value-of select="." />
    </xsl:template>

    <xsl:template match="cci:z_sym_triangle_bullet">
        &#8226;
        <xsl:value-of select="." />
    </xsl:template>

    <xsl:template match="text()">
        <xsl:value-of select="." />
    </xsl:template>
</xsl:stylesheet>

      

+3


source to share


1 answer


I would define a key to map elements with this attribute to the previous sibling where you want to insert them:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:cci="urn:schemas-ccieurope.com"
    xmlns:ccit="http://www.ccieurope.com/xmlns/ccimltables" xmlns:ccix="http://www.ccieurope.com/xmlns/ccimlextensions"
    exclude-result-prefixes="xsl cci ccit ccix">

    <xsl:key name="k1" match="cci:p[@ccix:annotation = 'insertion']"
      use="generate-id(preceding-sibling::cci:p[not(@ccix:annotation)][1])"/>

    <xsl:strip-space elements="*" />
    <xsl:output method="html" encoding="UTF-8" />

    <xsl:template match="/">
        <html>
            <xsl:apply-templates />
        </html>
    </xsl:template>

    <xsl:template match="cci:p[not(@ccix:annotation)]">
      <p>
        <xsl:apply-templates select="node() | key('k1', generate-id())/node()"/>
      </p>
    </xsl:template>

    <xsl:template match="cci:p[@ccix:annotation = 'insertion']"/>

    <xsl:template match="cci:italic">
        <em>
            <xsl:apply-templates />
        </em>
    </xsl:template>

    <xsl:template match="cci:endnote_contrib">
        <em>
            <xsl:apply-templates />
        </em>
    </xsl:template>

    <xsl:template match="cci:extra_leading">
    </xsl:template>

    <xsl:template match="cci:bold">
        <strong>
            <xsl:apply-templates />
        </strong>
    </xsl:template>

    <xsl:template match="cci:subhead">
        <h2 class="cci-subhead">
            <xsl:value-of select="." />
        </h2>
    </xsl:template>

    <xsl:template match="ccit:table">
        <table class="cci-table">
            <xsl:apply-templates />
        </table>
    </xsl:template>

    <xsl:template match="ccit:tr">
        <tr>
            <xsl:apply-templates />
        </tr>
    </xsl:template>

    <xsl:template match="ccit:td">
        <td>
            <xsl:value-of select="." />
        </td>
    </xsl:template>

    <xsl:template match="cci:l_category">
        <h2 class="cci-category">
            <xsl:value-of select="." />
        </h2>
    </xsl:template>

    <xsl:template match="cci:l_category_sub">
        <h2 class="cci-category-sub">
            <xsl:value-of select="." />
        </h2>
    </xsl:template>

    <xsl:template match="cci:l_region">
        <h2 class="cci-region">
            <xsl:value-of select="." />
        </h2>
    </xsl:template>

    <xsl:template match="cci:l_region_location">
        <h2 class="cci-region-location">
            <xsl:value-of select="." />
        </h2>
    </xsl:template>

    <xsl:template match="cci:l_region_sub">
        <h2 class="cci-region-sub">
            <xsl:value-of select="." />
        </h2>
    </xsl:template>

    <xsl:template match="factbox_bold">
        <strong>
            <xsl:apply-templates />
        </strong>
    </xsl:template>

    <xsl:template match="cci:factbox_head">
        <strong>
            <xsl:value-of select="." />
        </strong>
    </xsl:template>

    <xsl:template match="cci:z_sym_round_bullet">
        &#8226;
        <xsl:value-of select="." />
    </xsl:template>

    <xsl:template match="cci:z_sym_triangle_bullet">
        &#8226;
        <xsl:value-of select="." />
    </xsl:template>

    <xsl:template match="text()">
        <xsl:value-of select="." />
    </xsl:template>
</xsl:stylesheet>

      

With this stylesheet, Saxon 6.5.5 outputs the result



<html>
   <p>OAKLAND, Calif. &#8212; A former student suspected of opening fire at a small Christian college in California, killing seven people
      and wounding three, was targeting a school administrator and former classmates who he felt had treated him unfairly, police
      said yesterday.
   </p>
   <p>Oakland Police Chief Howard Jordan said at a news conference that One Goh, 43, who had been expelled from Oikos University,
      had been cooperative with investigators after being taken into custody but &#8220;not particularly remorseful.&#8221;
   </p>
   <p>&#8220;We know that he came here with the intent of locating an administrator, and she was not here,&#8221; Jordan said. &#8220;He then went
      through the entire building systematically and randomly shooting victims.&#8221;
   </p>
   <p>The midmorning attack at Oikos, a small Oakland college that has links to the Korean-American Christian community, was the
      deadliest shooting rampage on a U.S. college campus since 
   </p>
</html>

      

to enter

<cci:body class="element" displayname="body" name="body" xmlns:cci="urn:schemas-ccieurope.com" xmlns:ccix="http://www.ccieurope.com/xmlns/ccimlextensions">
    <cci:p>OAKLAND, Calif. — A former student suspected of opening fire at a small Christian college in California, killing seven people and wounding three, was targeting a school administrator and former classmates who he felt had treated him unfairly, police said yesterday.</cci:p>
    <cci:p>Oakland Police Chief Howard Jordan said at a news conference that One Goh, 43, who had been expelled from Oikos University, had been cooperative with investigators </cci:p>
    <cci:p ccix:annotation="insertion">after being taken into custody but "not particularly remorseful."</cci:p>
    <cci:p>"We know that he came here with the intent of locating an administrator, and she was not here," Jordan said. "He then went through the entire building systematically and randomly shooting victims."</cci:p>
    <cci:p>The midmorning attack at Oikos, a small Oakland college that has links to the Korean-American Christian community, was the deadliest shooting rampage on a U.S. college campus since </cci:p>
</cci:body>

      

+3


source







All Articles