hnmcc 0 Newbie Poster

My project turns XML into HTML. I need to insert DIV elements in certain places and (so far) I haven't found a way of doing it.

My input XML, over which I have no control, looks like this:

<response>
	<result>
		<doc>
			<str name="item_A">A</str>
			<arr name="B">
				<str>B1</str>
				<str>B2</str>
				...
			</arr>
			<str name="item_B">C</str>
			<str name="item_D">D</str>
			<str name="item_E">E</str>
			...
		</doc>
		<doc>
			...
		</doc>
	</result>
</response>

My XSL, which does <i>almost</i> everything I need, looks like this:

<body>
	<div id="page">
		<xsl:apply-templates select="response/result/doc"/>
	</div>
</body>
  
<xsl:template match="doc/str">

	<xsl:if test="@name='item_A'">
	<div class="item_A">
	<xsl:value-of select="."/>
	</div>
	</xsl:if>

	<xsl:if test="@name='item_B'">
	<div class="item_B">
	<xsl:value-of select="."/>
	</div>
	</xsl:if>

	...

</xsl:template>

<xsl:template match="doc/arr"/>
<xsl:template match="doc/date"/>

This probably looks a little cumbersome, but I must ignore some <str> nodes AND each item must have a different class. To achieve the control I need, I must insert at least one DIV (preferably two, nested) around all the output from each <doc> node. Such output would look like this, with the two new DIVs classed as "doc_node1" and "doc_node2":

<body>
	<div id="page">
		<div class="doc_node1">
			<div class="doc_node2">
				<div class="item_A">
					content of item A
				</div>
				<div class="item_B">
					content of item B
				</div>
				...
			</div>
		</div>
		<div class="doc_node1">
			<div class="doc_node2">
				...
			</div>
		</div>
	</div>
</body>

I've tried quite a few methods, all of which have failed. Can anyone tell me how to do this?

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.