Reputation: 93
many thanks for any suggestions you can provide. I am working to convert a portion of an XML document to a list. I have the bulk of the transformation working; however, I'm getting hung up on a <emph>
child element. I would like to replace it with a " (quote), but I haven't been able to work out the replacement strategy.
Cheers! XML:
<ead>
<archdesc>
<dsc>
<head>Container List</head>
<c01 id="ref1251" level="file">
<did>
<unittitle>#464: Dutch. <emph render="doublequote">I know Mary [Frances <emph
render="doublequote">Dutchess</emph> (Watrous) Roth] packed it some
where!</emph>,</unittitle>
<container id="cid4822615" type="Box" label="Mixed Materials">2</container>
<container parent="cid4822615" type="Folder">110</container>
<unitdate>undated</unitdate>
<physdesc id="ref1252" label="General Physical Description note"
>(Negative)</physdesc>
</did>
</c01>
<c01 id="ref1331" level="file">
<did>
<unittitle>#476: Mountain home near Cosby,</unittitle>
<container id="cid4822586" type="Box" label="Mixed Materials">2</container>
<container parent="cid4822586" type="Folder">139</container>
<unitdate>undated</unitdate>
<physdesc id="ref1332" label="General Physical Description note">(6 of
6)</physdesc>
<physdesc id="ref1333" label="General Physical Description note"
>(Print)</physdesc>
</did>
</c01>
</dsc>
</archdesc>
</ead>
XSLT:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="2.0">
<xsl:output method="text"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<xsl:apply-templates select="ead/archdesc/dsc"/>
</xsl:template>
<xsl:template match="dsc">
<xsl:apply-templates select="c01/did"/>
</xsl:template>
<xsl:template match="did">
<xsl:apply-templates select="unittitle"/>
<xsl:text>	</xsl:text>
<xsl:text>Box: </xsl:text><xsl:apply-templates select="container[1]"/>
<xsl:text>	</xsl:text>
<xsl:text>Folder: </xsl:text><xsl:apply-templates select="container[2]"/>
<xsl:text>	</xsl:text>
<xsl:apply-templates select="unitdate"/>
<xsl:text>	</xsl:text>
<xsl:apply-templates select="physdesc"/>
<xsl:text> </xsl:text>
</xsl:template>
Upvotes: 0
Views: 207
Reputation: 243459
Here is an example how this can be done (both in XSLT 2.0 and in XSLT 1.0):
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="emph[@render eq 'doublequote']">
<xsl:text>"</xsl:text>
<xsl:apply-templates/>
<xsl:text>"</xsl:text>
</xsl:template>
</xsl:stylesheet>
When this transformation is applied on the following short XML document (excerpt from the provided one):
<unittitle>#464: Dutch.
<emph render="doublequote">I know Mary [Frances
<emph render="doublequote">Dutchess</emph> (Watrous) Roth] packed it some
where!</emph>,
</unittitle>
the wanted, correct result is produced:
#464: Dutch.
"I know Mary [Frances
"Dutchess" (Watrous) Roth] packed it some
where!",
Upvotes: 1