⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xpathmain.htm

📁 XML path visualiser
💻 HTM
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
  <TITLE>XPath Visualiser Ver.1.4</TITLE>
  <SCRIPT>
  var source = new ActiveXObject("MSXML2.DOMDocument");
  var style  = new ActiveXObject("MSXML2.DOMDocument");
  
  var strNamespace = new String("");
  var listNameSpaces = "";
  var objNameSpaces   = null; 
  
  var currentSelection = -1;
  var numSelected      =  0;
  var counterHeading   = "";
  
  var curSelClassName  = "";
  var objCurSelected   = null;
  var objStylesheetElement = null;
  
  var selVerticalOffset= 4;

  var errNotNodeSet = "Reference to variable or parameter 'selectedNodes' must evaluate to a node list."+"\r\n";
  
  var viewNavigationHTML;
  
  var isScalar = "0";
  var theScalarExpression = "@comment()";

  
  style.async=false;
  source.async=false;
  
  style.load("myDefaultss80.xsl");
  var objStylesheetElement = style.selectSingleNode("/xsl:stylesheet");
  var objStylesheetParam   = style.selectSingleNode("/xsl:stylesheet/xsl:param[@name='selectedNodes']");
  var styAttribs = objStylesheetElement.attributes;
  
  var numStyAtrribs = styAttribs.length;
  var numStlyleNamespaces = 0;
  
  var styNamespaceNames = new Array(numStyAtrribs);
  var styNamespaceURIs = new Array(numStyAtrribs);
  
  var i;
  
  
  for(i = 0; i < numStyAtrribs; i++)
  {
	var anAttrib = styAttribs.item(i);
	var attrName = anAttrib.name;
	
	if(attrName.substr(0, 6) == "xmlns:")
	{
		styNamespaceNames[attrName] = 1;
		styNamespaceURIs[anAttrib.nodeValue] = 1;
		
		numStlyleNamespaces++;
	}
  }

  </script>
  <STYLE>
    BODY {font-family:Arial}
    .heading {font-family:"Arial Black"}
    .sample {cursor:hand; font:9pt Courier; text-decoration:underline; text-indent:-1em; margin-left:1em}
    .note {font-size:x-small; font-style:italic}
  </STYLE>
</HEAD>
<SCRIPT>

  function loadFile()
  {
	var fileName = topFrame.oFile.value;
	
	source.load(fileName);
    if(source.parseError.errorCode != 0)
	{
	    //error found so show error message and stop
	    ShowError(source);
	    return;
	}

  	//alert("xml loaded");
	source.setProperty("SelectionLanguage", "XPath");

	removeNAmespaces();
	setNAmespaces();
	
	var firstQuery = topFrame.qryIn.value
	if(!firstQuery)
		firstQuery = "/"

	processExpression(firstQuery)
	return;
	var result = source.transformNode(style.documentElement);
	//alert("xml transformed");
	  viewFrame.document.clear();
	  viewFrame.document.body.innerHTML="";
	  viewFrame.document.close;
	  viewFrame.document.write(result);
	  viewFrame.document.close;
   }

  function processExpression(theQuery)
  {
	currentSelection = -1;
	objCurSelected   = null;
	isScalar = "0";
	doQuery(theQuery);
  }

  function doQuery(theQuery)
  {
	  //alert('"'+theQuery+'"');
	if(!theQuery)
	{
		alert("XPath Expression missing!");
		return;
	}
	//else
	  if(!source.documentElement)
		  loadFile()
    if(source.parseError.errorCode != 0)
	{
	    return;
	}
	  
	  //var q = source.documentElement.selectNodes(theQuery);
	  var p = style.selectSingleNode("/xsl:stylesheet/xsl:param[@name='selectedNodes']");
	  p.setAttribute("select", theQuery);
	  var q = style.selectSingleNode("/xsl:stylesheet/xsl:param[@name='isScalar']");
	  q.setAttribute("select", isScalar);
	  var scalarNode = style.selectSingleNode("/xsl:stylesheet/xsl:param[@name='scalarExpr']");
	  
	  if(isScalar == "1")
		  scalarNode.setAttribute("select", theScalarExpression);
	  
      //style.setProperty("SelectionLanguage", "XPath");
	  //alert(q.length);

	  viewFrame.document.clear();
	  viewFrame.document.body.innerHTML="";
	  viewFrame.document.close;

	  try
	  {
	  var result = source.transformNode(style.documentElement);
	  viewFrame.document.write(result);
	  viewFrame.document.close();

	  var totalSelected  = viewFrame.document.all("cntMatches").innerText;
	  var actualSelected;
	  if(totalSelected > 0)
	  {
		  actualSelected = viewFrame.document.all("Selected").length;
		  if(actualSelected == null)
			  actualSelected = 1;
	  }
	  else
		  actualSelected = 0;
		  
	  numSelected = actualSelected;
	  counterHeading = " of "+ actualSelected + "/" + totalSelected + " matches";

	  showCounter();
	  
	  if(isScalar == "1")
	  {
		var exprResult = viewFrame.document.all("theBody");
		
		var strScalarResult = exprResult.attributes.item("title").value;
		if(!strScalarResult)
			alert(exprResult.attributes.item("title"));
		else
			alert(strScalarResult);

		exprResult.title = "";
	  }

	  }
	  catch(transException)
	  {
		  var strDescription = transException.description;
		  //alert(errNotNodeSet);
		  if(strDescription == errNotNodeSet)
		  //if(transException.number == -2147467259)
		  {
			  doScalarQuery(theQuery);
		  }
		  else
			  alert("Error No.:" + transException.number + "\n" 
			  + transException.name + ': "'+strDescription+'"');
	  }
  }

  function doScalarQuery(aQuery)
  {
	//alert("Scalar Query");
	isScalar="1";
	theScalarExpression = aQuery;
	
	doQuery("@comment()");
	
	isScalar="0";

  }
  
  function loadQuery()
  {
  	var q = topFrame.window.event.srcElement.innerText;
  	qryIn.value = q;
	if(!q)
	{
		alert("XPath Expression missing!");
	}
  	else
		doQuery(q);
  }
  
	function scrollToShow()
	{
		if(objCurSelected)
			objCurSelected.className = curSelClassName;
		var objSelected = viewFrame.document.all.item("Selected", currentSelection);
		curSelClassName = objSelected.className;
		objCurSelected   = objSelected;
		objSelected.className="cse"
		objSelected.scrollIntoView(false);
		viewFrame.document.body.doScroll("pageLeft");
		
		var i;
		for(i = 0; i < selVerticalOffset; i++)
			viewFrame.document.body.doScroll("down");
	}
	
	function nextSelection()
	{
		if(currentSelection < numSelected - 1)
		{
			currentSelection++;
			scrollToShow();
			showCounter();
		}
	}

	function prevSelection()
	{
		//alert("Prev Selection");
		if(currentSelection > 0)
		{
			currentSelection--;
			scrollToShow();
			showCounter();
		}
	}

	function firstSelection()
	{
		currentSelection = 0;
		scrollToShow();
		showCounter();
	}

	function lastSelection()
	{
		currentSelection = numSelected - 1;
		scrollToShow();
		showCounter();
	}

  function showCounter()
  {
	  topFrame.document.all("docNavigation").innerHTML = viewNavigationHTML
		   +" " + (currentSelection+1) + counterHeading;
  }
	  
  function ShowError(objDoc)
  {
    //create and display error message
    var strError;
    strError = "Invalid XML file !<BR />" 
             + "File URL: " + objDoc.parseError.url + "<BR />" 
             + "Line No.: " + objDoc.parseError.line + "<BR />" 
             + "Character: " + objDoc.parseError.linepos + "<BR />" 
             + "File Position: " + objDoc.parseError.filepos + "<BR />" 
             + "Source Text: " + objDoc.parseError.srcText + "<BR />" 
             + "Error Code: " + objDoc.parseError.errorCode + "<BR />" 
             + "Description: " + objDoc.parseError.reason;

	  viewFrame.document.clear();
	  viewFrame.document.body.innerHTML="";
	  viewFrame.document.close;
	  viewFrame.document.write(strError);
	//alert(strError);
  }  


function removeNAmespaces()
{
	if(objNameSpaces == null)
		return;

	var numNamespaces  = objNameSpaces.length - 1;
    strNamespace = "";
	if(numNamespaces >= 0)
	{
		var oNamedNodeMap = objStylesheetElement.attributes;
		var arrayNamespaces = new Array(numNamespaces);
		for(i = 0; i <= numNamespaces; i++)
		{
			var objNamespace = objNameSpaces.item(i);
			strNamespace = objNamespace.xml;


			if( (styNamespaceNames[objNamespace.name] != 1)
				&& (styNamespaceURIs[objNamespace.nodeValue] != 1) )

				if(strNamespace.substr(0, 9) != "xmlns:xml" && !arrayNamespaces[strNamespace])
				{
					arrayNamespaces[strNamespace] = 1;
					var attrName = objNamespace.name;
					//alert('Removing namespace "' + attrName + '"');
					objStylesheetElement.removeAttribute(attrName);
					//oNamedNodeMap.removeNamedItem(name);
					//listNameSpaces += strNamespace;
					
					//if(i < numNamespaces)
						//listNameSpaces += " ";
				}
		}
		
	}
		//alert(listNameSpaces);
		//source.setProperty("SelectionNamespaces", listNameSpaces);
		objNameSpaces == null;
		return;
}	



function setNAmespaces()
{
	var i;
	objNameSpaces = source.documentElement.selectNodes("//namespace::*");
	//listNameSpaces = "";
	var numNamespaces  = objNameSpaces.length - 1;
    strNamespace = "";
	if(numNamespaces >= 0)
	{
		var oNamedNodeMap = objStylesheetElement.attributes;
		var arrayNamespaces = new Array(numNamespaces);
		for(i = 0; i <= numNamespaces; i++)
		{
			var objNamespace = objNameSpaces.item(i);
			strNamespace = objNamespace.xml;
			
			if( (styNamespaceNames[objNamespace.name] != 1)
				&& (styNamespaceURIs[objNamespace.nodeValue] != 1) )

				if(strNamespace.substr(0, 9) != "xmlns:xml" && !arrayNamespaces[strNamespace])
				{
					arrayNamespaces[strNamespace] = 1;
					var attrName = objNamespace.name;
					var objNewNode=style.createNode(2, attrName, "");
					objNewNode.nodeValue = objNamespace.nodeValue;
					
					oNamedNodeMap.setNamedItem(objNewNode);
					//listNameSpaces += strNamespace;
					
					//if(i < numNamespaces)
						//listNameSpaces += " ";
				}
		}
		
	}
		//alert(listNameSpaces);
		//source.setProperty("SelectionNamespaces", listNameSpaces);
		return;
}

</SCRIPT>

<!-- frames -->
<frameset  rows="24%,*">
    <frame name="topFrame" src="topFrame.htm" marginwidth="10" marginheight="10" scrolling="no" frameborder="1">
    <frame name="viewFrame" src="viewFrame.htm" marginwidth="10" marginheight="10" scrolling="auto" frameborder="0">
</frameset>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -