Reputation: 1760
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>
Upvotes: 3
Views: 3012
Reputation: 167716
I would define a key to map the elements with that attribute to the preceding sibling you want to insert them in:
<?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">
•
<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>
With that stylesheet Saxon 6.5.5 outputs the result
<html>
<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.
</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 “not particularly remorseful.”
</p>
<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.”
</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>
for the input
<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>
Upvotes: 3