I want to select all nodes <cci:p> that do not have an attribute.
So, in the example below, there’s a node (denoted with bold text or **) that is causing me some issues. Basically, I want to select all <cci:p> nodes and output them wrapped in <p> tags. But this node causes an extra paragraph to be outputted, which is incorrect. In this instance, what I would like to have happen is that if a node with that attribute is found, I want to append it to the previously processed node.
Here’s what I’m getting:
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.
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 ���not particularly remorseful.���
���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.���
Here’s what I would like to get:
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.
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 ���not particularly remorseful.���
���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.���
Sample XML:
<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>
Sample XSLT:
<?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">
•
<xsl:value-of select="." />
</xsl:template>
<xsl:template match="cci:z_sym_triangle_bullet">
•
<xsl:value-of select="." />
</xsl:template>
<xsl:template match="text()">
<xsl:value-of select="." />
</xsl:template>
</xsl:stylesheet>
I would define a key to map the elements with that attribute to the preceding sibling you want to insert them in:
With that stylesheet Saxon 6.5.5 outputs the result
for the input