Hi Mike,
Thanks for the reply. I'm still new at XSLT so I'm not sure I fully
understand the concept presented, but I tried it, to the best of my
ability, and it didn't work. I think it's time to come forth and just
be honest...
I'm trying to lend a hand on the htdig project (http://www.htdig.org/).
They have a document called defaults.xml which contains the default
values for the configuration attributes. I've documented what I'm
working on here: http://www.tedmasterweb.com/htdig/
I've tried a variety of variations on the procedure you suggest, but it
just doesn't seem to work, so, I'm reposting the question with a little
better example...
Sample XML
<HtdigAttributes>
<attribute name="accents_db" type="string_list" programs="htdig">
<example>search_algorithm, search_results_header</example>
<description>
<p>bla bla bla bla bla bla <strong>bla bla</strong> bla
bla bla <em>bla</em></p>
<p>bla bla <ref>bla</ref> bla, bla!</p>
</description>
</attribute>
</HtdigAttributes>
Sample XSL
<xsl:output method="xml"
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
doctype-public="-//W3C/DTD XHTML 1.0 Transitional//EN" indent="yes"
encoding="ISO-8859-1" />
<xsl:template match="/">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="HtdigAttributes">
<xsl:apply-templates select="attribute" />
</xsl:template>
<xsl:template match="attribute">
<!-- we do a bunch of fun transofrmations here -->
<xsl:value-of select="@name" />
<xsl:value-of select="@type" />
<!-- would like to have the value of the description node here, but
with all HTML elements left in tact and all "ref" elements transformed
-->
</xsl:template>
Any suggestions on changes that would make your suggestion work in this
context?
Thanks again!
Ted
On Thursday, February 13, 2003, at 09:25 PM, Mike Brown wrote:
Ted Stresen-Reuter wrote:
I have an xml document whose elements contain html as in the following
example:
<myelement>
<p>This is <ref>the</ref> text node</p>
</myelement>
What I'd like to be able to do is transform just the ref element and
copy all the others.
This is more or less in the XSLT 1.0 spec, under Copying.
The "identity transform" described there is a template that has a
relatively
low priority and recursively copies all nodes from the source tree to
the
result. If you supplement that template with another that, by virtue of
matching with a more specific node test than the other, has a higher
priority,
then you can override the identity transform for certain elements:
<!-- identity transform -->
<xsl:template match="@*node()">
<xsl:copy><xsl:apply-templates select="@*|node()"/></xsl:copy>
</xsl:template>
<!-- replace a ref element with its children -->
<xsl:template match="ref">
<xsl:apply-templates/>
</xsl:template>
Also, just FYI, your source tree has a structure like this:
root
|
|__element 'myelement'
|
|__text '\n '
|
|__element 'p'
| |
| |__text 'This is '
| |
| |__element 'ref'
| | |
| | |__text 'the'
| |
| |__text ' text node'
|
|__text '\n'
...that is, "This is the text node" is not very accurate; the phrase
is split
among 3 different text nodes, although if you use the templates above,
you'll
end up with one :)
Mike
--
Mike J. Brown | http://skew.org/~mike/resume/
Denver, CO, USA | http://skew.org/xml/
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list