📄 mydefaultss80.xsl
字号:
<?xml version="1.0"?> <!-- XPath Visualiser, by Dimitre Novatchev, dnovatchev@yahoo.com This is a customisation of the original DEFAULTSS.XSL written by Johnatan Marsh. The changes that had to be made are listed below:1. The original stylesheet was modified to work with the XSLT default namespace uri: xmlns:xsl="http://www.w3.org/1999/XSL/Transform".2. The modifications above include a completely new wayof detecting namespace node definitions - something thatwas not provided by the old DEFAULTSS.XSL and is in fact considered impossile (see Mike Kay's book, page 60).In fact this still doesn't mean Mike's wrong - note thecritical importance of using the vxpathuser:xml() xtn f-n.3. A global parameter named "selectedNodes" was added.4. Additional logic was added to all templates to recognise whether the current match belongs tothe $selectedNodes nodeset.5. All nodes that belong to the $selectedNodes nodeset are treated in a special way - hi-lighted.6. All container nodes that are collapsed and hide selectionsare also specially hi-lighted. Thus it is possile to have a minimumlength display of the xml source that still shows all selected nodes.Known issues:1. This tool will not display selected nodes that were not explicitlyspecified in the text of the xml source document. Most notably this istrue for (propagated) namespace nodes and for default/implied attributesthat were specified in a DTD and not explicitly specified in the textof the source document.However, the containing nodes are still hi-lighted to indicate the presenceof such selected and not specified in the text nodes.2.A bug in all MSXML processors before September sometimesprevents the correct finding and hilighting of nodes that are specified by the XPath expression.What happens is that sometimes, according to MSXML count(nodeset | member-node) != count(nodeset)I have reported this bug to Microsoft twice (every month since June)and it seems to have been fixed in their September Release. --><!-- Original comment block by Jonathan Marsh (jmarsh@microsoft.com) --><!-- IE5 default style sheet, provides a view of any XML document and provides the following features: - auto-indenting of the display, expanding of entity references - click or tab/return to expand/collapse - color coding of markup - color coding of recognized namespaces - xml, xmlns, xsl, dt This style sheet is available in IE5 in a compact form at the URL "res://msxml.dll/DEFAULTSS.xsl". This version differs only in the addition of comments and whitespace for readability. Author: Jonathan Marsh (jmarsh@microsoft.com)--><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:dt="urn:schemas-microsoft-com:datatypes" xmlns:d2="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:vxpathuser="myvxpathnamespace" > <xsl:param name="selectedNodes" select="@comment()"/><xsl:param name="scalarExpr" select="@comment()"/><xsl:param name="isScalar" select="0"/><xsl:variable name="nodesWithSelectedOffspring" select="//*[(* | */@* | text() | */processing-instruction() | */comment() | */namespace::*)[count(. | $selectedNodes) = count($selectedNodes)]]/./ancestor-or-self::*" /><xsl:template match="/"> <HTML> <HEAD> <TITLE ID="cntMatches"><xsl:value-of select="count($selectedNodes)"/></TITLE> <STYLE> BODY {font:x-small 'Verdana'; margin-right:1.5em} <!-- container for expanding/collapsing content --> .c {cursor:hand} <!-- selected nodes: Hi-lighted --> .se {background-Color:yellow} <!-- selected nodes: Current Selection - Hi-lighted --> .cse {background-Color:#F2AAF7} <!-- button - contains +/-/nbsp --> .b {color:red; font-family:'Courier New'; font-weight:bold; text-decoration:none} <!-- button of an element that contains selected sub-elements - contains +/-/nbsp --> .bs {color:red; font-family:'Courier New'; font-weight:bold; text-decoration:none; background-Color:#3300ff} <!-- element container --> .e {margin-left:1em; text-indent:-1em; margin-right:1em} <!-- comment or cdata --> .k {margin-left:1em; text-indent:-1em; margin-right:1em} <!-- tag --> .t {color:#990000} <!-- tag in xsl namespace --> .xt {color:#000099} <!-- attribute in xml or xmlns namespace --> .ns {color:red} <!-- attribute in dt namespace --> .dt {color:green} <!-- markup characters --> .m {color:blue} <!-- text node --> .tx {font-weight:bold; color:black} <!-- multi-line (block) cdata --> .db {text-indent:0px; margin-left:1em; margin-top:0px; margin-bottom:0px; padding-left:.3em; border-left:1px solid #CCCCCC; font:small Courier} <!-- single-line (inline) cdata --> .di {font:small Courier} <!-- DOCTYPE declaration --> .d {color:blue} <!-- pi --> .pi {color:blue} <!-- multi-line (block) comment --> .cb {text-indent:0px; margin-left:1em; margin-top:0px; margin-bottom:0px; padding-left:.3em; font:small Courier; color:#888888} <!-- single-line (inline) comment --> .ci {font:small Courier; color:#888888} <!-- implied/default attribute name and value --> .dfa {font:small Courier; color:#888888} PRE {margin:0px; display:inline} </STYLE> <SCRIPT><xsl:comment><![CDATA[ // Detect and switch the display of CDATA and comments from an inline view // to a block view if the comment or CDATA is multi-line. function f(e) { // if this element is an inline comment, and contains more than a single // line, turn it into a block comment. if (e.className == "ci") { if (e.children(0).innerText.indexOf("\n") > 0) fix(e, "cb"); } // if this element is an inline cdata, and contains more than a single // line, turn it into a block cdata. if (e.className == "di") { if (e.children(0).innerText.indexOf("\n") > 0) fix(e, "db"); } // remove the id since we only used it for cleanup e.id = ""; } // Fix up the element as a "block" display and enable expand/collapse on it function fix(e, cl) { // change the class name and display value e.className = cl; e.style.display = "block"; // mark the comment or cdata display as a expandable container j = e.parentElement.children(0); j.className = "c"; // find the +/- symbol and make it visible - the dummy link enables tabbing k = j.children(0); k.style.visibility = "visible"; k.href = "#"; } // Change the +/- symbol and hide the children. This function works on "element" // displays function ch(e) { // find the +/- symbol mark = e.children(0).children(0); // if it is already collapsed, expand it by showing the children if (mark.innerText == "+" || mark.innerText == "*" ) { mark.innerText = "-"; for (var i = 1; i < e.children.length; i++) e.children(i).style.display = "block"; } // if it is expanded, collapse it by hiding the children else if (mark.innerText == "-") { if(mark.className == "bs") mark.innerText = "*"; else mark.innerText = "+"; for (var i = 1; i < e.children.length; i++) e.children(i).style.display="none"; } } // Change the +/- symbol and hide the children. This function work on "comment" // and "cdata" displays function ch2(e) { // find the +/- symbol, and the "PRE" element that contains the content mark = e.children(0).children(0); contents = e.children(1); // if it is already collapsed, expand it by showing the children if (mark.innerText == "+") { mark.innerText = "-"; // restore the correct "block"/"inline" display type to the PRE if (contents.className == "db" || contents.className == "cb") contents.style.display = "block"; else contents.style.display = "inline"; } // if it is expanded, collapse it by hiding the children else if (mark.innerText == "-") { mark.innerText = "+"; contents.style.display = "none"; } } // Handle a mouse click function cl() { e = window.event.srcElement; // make sure we are handling clicks upon expandable container elements if (e.className != "c") { e = e.parentElement; if (e.className != "c") { return; } } e = e.parentElement; // call the correct funtion to change the collapse/expand state and display if (e.className == "e") ch(e); if (e.className == "k") ch2(e); } // Dummy function for expand/collapse link navigation - trap onclick events instead function ex() {} // Erase bogus link info from the status window function h() { window.status=" "; } // Set the onclick handler document.onclick = cl; ]]></xsl:comment></SCRIPT> </HEAD> <!-- bgcolor="#ccffff" --> <!-- bgcolor="#E3FAFB" --> <!-- bgcolor="#D0FDEB" --> <BODY class="st" bgcolor="#E9FEFE" ID="theBody" title="{$scalarExpr}"> <xsl:apply-templates/> </BODY> </HTML></xsl:template><!-- Templates for each node type follows. The output of each template has a similar structure to enable script to walk the result tree easily for handling user interaction. --><!-- Template for pis not handled elsewhere --><xsl:template match="processing-instruction()"><xsl:variable name="belongs" select="count($selectedNodes|.)-count($selectedNodes)"/> <DIV class="e"> <SPAN class="b"> </SPAN> <SPAN class="m"><?</SPAN> <xsl:choose> <xsl:when test="$belongs=0"> <SPAN id="Selected" class="se"><xsl:value-of select="name()"/> <xsl:text> </xsl:text><xsl:value-of select="."/></SPAN> </xsl:when> <xsl:otherwise> <SPAN class="pi"><xsl:value-of select="name()"/> <xsl:text> </xsl:text><xsl:value-of select="."/></SPAN> </xsl:otherwise> </xsl:choose> <xsl:text> </xsl:text> <SPAN class="m">?></SPAN> </DIV></xsl:template><!-- Template for the XML declaration. Need a separate template because the pseudo-attributes are actually exposed as attributes instead of just element content, as in other pis --><xsl:template match="processing-instruction('xml')"> <DIV class="e"> <SPAN class="b"><xsl:value-of select="string(' ')"/> </SPAN> <SPAN class="m"><?</SPAN><xsl:variable name="belongs" select="count($selectedNodes|.)-count($selectedNodes)"/> <xsl:text> </xsl:text> <xsl:choose> <xsl:when test="$belongs=0"> <SPAN id="Selected" class="se">xml <xsl:for-each select="@*"><xsl:value-of select="name()"/>="<xsl:value-of select="."/>" </xsl:for-each></SPAN> </xsl:when>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -