Now we’ll take a look at the stylesheet and how it works. The stylesheet creates a number of nested tables to illustrate the XPath view of the document. We begin by writing the basic HTML elements to the output stream, defining some CSS styles and creating a legend for our nested tree view. Having created the legend for our document, we select all the different types of nodes and represent them:
<xsl:for-each select="*|comment()|processing-instruction()|text()"> ... </xsl:for-each>
It’s very important to understand the difference between
the XPath document root and the XML
root element. In our XML sonnet, there are processing instructions
and comments outside the root element. The document root contains
those processing instructions and comments in addition to the
<sonnet> element itself. In a location
/ represents the document
/sonnet represents the
root element in our XML document. (The more general expression
/* represents the root element in
[2.0] The situation is even more complicated in XPath 2.0, where you have to distinguish between a node type (document node, element node, etc.) and the role the node plays: nodes of any type can be at the root of a document. It’s only in well-formed XML documents that we can say that the root node is a document node and its only element child is the document element. All that being said, if you’re transforming XML documents, this situation will come up very rarely.
attribute in the ...