什么是MSXML?

MSXML是微软非托管代码栈中最为核心的XML服务集合,不但适合基于COM的开发应用,更是微软AJAX解决方案和客户端XSLT解决方案的核心组件。

安装后会在c:\windows\system32\目录下,如:msxml6.dll

 

测试代码:

 

ContractedBlock.gif ExpandedBlockStart.gif Code
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD><META content="IE=5.0000" http-equiv="X-UA-Compatible">
<TITLE>XML Evaluator</TITLE>
<META content="text/html; charset=utf-8" http-equiv=Content-Type>
<STYLE type=text/css>.xml_source {
    FONT-FAMILY
: "Lucida Console"; FONT-WEIGHT: bold
}
.output 
{
    BACKGROUND-COLOR
: #ffffff; FONT-FAMILY: "Lucida Console", font-weight: bold; COLOR: #000000; FONT-SIZE: 16px
}
</STYLE>

<SCRIPT language=JavaScript>
var area_obj;
var timer_enabled = false;

var xml;
var xinput;
var output;
var htmloutput;
var old_xml = "";
var old_xinput = "";
var old_type = "";
var old_parser = "";
var old_nsdef = "";
var saved_xpath = "";
var saved_xsl = "";
var saved_xsd = "";
var saved_xdr = "";
var xmldoc;
var xinputdoc;
var schemas;

function init()
{
  xml 
= document.getElementById("xml");
  xinput
= document.getElementById("xinput");
  output 
= document.getElementById("output");
  htmloutput 
= document.getElementById("htmloutput");
  nsdef 
=  document.getElementById("nsdef")
  document.getElementById(
"default_xpath").style.visibility = 'hidden';
  document.getElementById(
"default_xsl").style.visibility = 'hidden';
  document.getElementById(
"default_xsd").style.visibility = 'hidden';
  document.getElementById(
"default_xdr").style.visibility = 'hidden';
  saved_xpath 
= document.getElementById("default_xpath").value;
  saved_xsl 
= document.getElementById("default_xsl").value;
  saved_xsd 
= document.getElementById("default_xsd").value;
  saved_xdr 
= document.getElementById("default_xdr").value;
  eval_xml();
}

function get_type()
{
  
for (var i=0; i < document.main_form.type.length; i++)
  {
    
if (document.main_form.type[i].checked)
      {
        
return document.main_form.type[i].value;
      }
  }
  
return "XPath";
}

function get_parser()
{
  
for (var i=0; i < document.main_form.parser.length; i++)
  {
    
if (document.main_form.parser[i].checked)
      {
        
return document.main_form.parser[i].value;
      }
  }
  
return "MSXML6";
}

function loadComponents()
{
  
var parser = get_parser();
  
switch(parser)
  {
  
case "MSXML3":
    xmldoc 
= new ActiveXObject("MSXML2.DOMDocument.3.0");
    xinputdoc 
= new ActiveXObject("MSXML2.DOMDocument.3.0");
    xmldoc.schemas 
= new ActiveXObject("MSXML2.XMLSchemaCache.3.0");
    
break;
  
case "MSXML4":
    xmldoc 
= new ActiveXObject("MSXML2.DOMDocument.4.0");
    xinputdoc 
= new ActiveXObject("MSXML2.DOMDocument.4.0");
    xmldoc.schemas 
= new ActiveXObject("MSXML2.XMLSchemaCache.4.0");
    
break;
  
default:
    xmldoc 
= new ActiveXObject("MSXML2.DOMDocument.6.0");
    xinputdoc 
= new ActiveXObject("MSXML2.DOMDocument.6.0");
    xmldoc.schemas 
= new ActiveXObject("MSXML2.XMLSchemaCache.6.0");
  }
}

function eval_xml()
{
  
if (old_xml == xml.value && old_xinput == xinput.value && old_type == get_type() && old_parser == get_parser() && old_nsdef == nsdef.value)
  {
    
return// do not evaluate if both xml and xsl are not changed at all
  }

  loadComponents();
  
switch(old_type)
  {
  
case "XPath":
      saved_xpath 
= xinput.value;
      
break;
  
case "XSLT":
      saved_xsl 
= xinput.value;
      
break;
  
case "Schema":
      saved_xsd 
= xinput.value;
      
break;
  
case "XDR":
      saved_xdr 
= xinput.value;
      
break;
  }

  old_xml 
= xml.value;
  old_xinput 
= xinput.value;
  old_parser 
= get_parser();

  
if(old_type != get_type())
  {
    old_type 
= get_type();
    
switch(old_type)
    {
    
case "XPath":
      xinput.value 
= saved_xpath;
      
break;
    
case "XSLT":
      xinput.value 
= saved_xsl;
      
break;
    
case "Schema":
      xinput.value 
= saved_xsd;
      
break;
    
case "XDR":
      xinput.value 
= saved_xdr;
      
break;
    }
  }
  
if(old_type == "Schema" && old_parser == "MSXML3")
  {
    output.style.color 
= "#000000";
    output.value 
= "";
    htmloutput.style.color 
= "#FF0000"
    htmloutput.innerHTML 
= "(error):MSXML3 doesn't support Schema, use XDR instead.";
    
return;
  } 
else if(old_type == "XDR" && old_parser != "MSXML3") {
    output.style.color 
= "#000000";
    output.value 
= "";
    htmloutput.style.color 
= "#FF0000"
    htmloutput.innerHTML 
= "(error):XDR is only supported in MSXML3.";
    
return;
  }

  htmloutput.innerHTML 
= "Processing " + old_type + " on " + old_parser + " dot.gif";

  xmldoc.validateOnParse
=false;
  xmldoc.setProperty(
"ProhibitDTD",false);
  xmldoc.loadXML(xml.value);
  
if (xmldoc.parseError != 0)
  {
    xml.style.color 
= "#FF0000";
    output.value 
= "";
    htmloutput.style.color 
= "#FF0000"
    htmloutput.innerHTML 
= "(xml error):" + xmldoc.parseError.reason;
    
return;
  }

  
if(nsdef.value != "")
  {
    xmldoc.setProperty(
"SelectionNamespaces", nsdef.value.replace("\n"" "));
//  xmldoc.setProperty("SelectionLanguage", "XPath"); //break MSXML3
  }


  xml.style.color 
= "#000000";
  xinput.style.color 
= "#000000";
  output.style.color 
= "#000000";
  htmloutput.style.color 
= "#000000";

  
switch(old_type)
  {
  
case "XPath":
    evaluate_xpath(xmldoc, xinput, output, htmloutput);
    
break;
  
case "XSLT":
    evaluate_xsl(xmldoc, xinput, output, htmloutput);
    
break;
  
case "Schema":
  
case "XDR":
    evaluate_xsd(xml, xinput, output, htmloutput);
    
break;
  }
}

function evaluate_xpath(doc, x, o, h)
{
  
try
  {
    o.value 
= "";
    
var elements = doc.selectNodes(x.value);
    
if (elements.length>0)
    {
      h.style.color 
= "#000000";
      
var s = "";
      
for (var i=0; i<elements.length; i++)
      {
        o.value 
+= get_node_value(elements.item(i)) + "\n";
        s 
= s + "<p class='output'>" + get_node_path(elements.item(i)) + "</p>";
      }
      h.innerHTML 
= s;
    }
    
else
    {
      o.value 
= "";
      h.style.color 
= "#C0C0C0"
      h.innerHTML 
= "(no ouput)";
    }
  }
  
catch (e)
  {
    o.value 
= "";
    h.style.color 
= "#FF0000";
    h.innerHTML 
= "(xpath error):" + e.message;
  }
}

function evaluate_xsl(doc, x, o, h)
{
  xinputdoc.loadXML(x.value);
  o.value 
= "";
  
if (xinputdoc.parseError != 0)
  {
    x.style.color 
= "#FF0000";
    h.style.color 
= "#FF0000"
    h.innerHTML 
= "(xsl error):" + xinputdoc.parseError.reason;
    
return;
  }

  
try
  {
    
var outstr = doc.transformNode(xinputdoc);
    
if (outstr.length>0)
    {
      o.value 
= outstr;
      h.innerHTML 
= outstr;
    }
    
else
    {
      o.value 
= "";
      h.style.color 
= "#C0C0C0";
      h.innerHTML 
= "(no output)";
    }
  }
  
catch (e)
  {
    o.value 
= "";
    h.style.color 
= "#FF0000";
    h.innerHTML 
= "(xslt error):" + e.message;;
  }
}

function evaluate_xsd(xml, x, o, h)
{
  o.value
="";

  xinputdoc.setProperty(
"ProhibitDTD",false);
  xinputdoc.resolveExternals 
= true;
  xinputdoc.loadXML(x.value);
  
if (xinputdoc.parseError != 0)
  {
    x.style.color 
= "#FF0000";
    h.style.color 
= "#FF0000";
    h.innerHTML 
= "(xsd error):" + xinputdoc.parseError.reason;
    
return;
  }

  
try{
    
var targetNS = xmldoc.childNodes[0].namespaceURI;
    xmldoc.schemas.add(targetNS, xinputdoc);
  }
catch(se){
    h.style.color 
= "#FF0000";
    h.innerHTML 
= "(schema error):" + se.description;
    
return;
  }

  
var vError = xmldoc.validate();
  
if (vError.reason == "")
  {
    h.style.color 
= "#000000";
    h.innerHTML 
= "Validation success";
  }
  
else
  {
    h.style.color 
= "#FF0000";
    h.innerHTML 
= "(validation error):" + vError.reason;
  }
}

function get_node_path(n)
{
  
var s = "/";
  
var pn = n.parentNode;

  
while (pn!=null && pn.nodeName!="#document")
  {
    s 
= "/" + pn.nodeName + s;
    pn 
= pn.parentNode;
  }
  s 
= "<b>" + n.nodeTypeString + "</b>: " + s + "<b>" + get_node_string(n) + " = " + get_node_value(n) + "</b>";
  
return s;
}

function get_node_string(n)
{
  
var t = n.nodeType;
  
if (t == 2)
    
return "@" + n.nodeName;
  
else
    
return n.nodeName;

}

function get_node_value(n)
{
  
var t = n.nodeType;
  
var s;

  
if (t == 1)
  {
    s 
= n.text;
  }
  
else
  {
    s 
= n.nodeValue;
  }
  
if (s==null || s=="")
    s 
= "[empty]";

  
return s;
}

function enable_area_timer(o)
{
  timer_enabled 
= true;
  setTimeout(
"timer_handler()"500);
}

function disable_area_timer(o)
{
  timer_enabled 
= false;
}

function timer_handler()
{
  
if (timer_enabled)
  {
    eval_xml();
    setTimeout(
"timer_handler()"500);
  }
}

</SCRIPT>
</HEAD>
<BODY onload=init()>
<FORM name="main_form" action=#>
<TABLE border=0 cellSpacing=0 cellPadding=2 cols=3 rows="4">
  
<TBODY>
  
<TR>
  
<TD>
    
<H2>MSXML Evaluator</H2>
  
</TD>
  
<TD valign="top">Functinality
      
<input type="radio" name="type" value="XPath" onclick="javascript:eval_xml()" checked>XPath 1.0</input>
      
<input type="radio" name="type" value="XSLT" onclick="javascript:eval_xml()">XSLT 1.0</input>
      
<input type="radio" name="type" value="Schema" onclick="javascript:eval_xml()">Schema 1.0</input>
      
<input type="radio" name="type" value="XDR" onclick="javascript:eval_xml()">XDR</input>
      
<BR/>Component
      
<input type="radio" name="parser" value="MSXML3" onclick="javascript:eval_xml()">MSXML 3.0</input>
      
<input type="radio" name="parser" value="MSXML4" onclick="javascript:eval_xml()">MSXML 4.0</input>
      
<input type="radio" name="parser" value="MSXML6" checked onclick="javascript:eval_xml()">MSXML 6.0</input>
  
</TD>
  
<TD valign="top">
    
<B>Namespaces for XPath</B><BR/><TEXTAREA style="COLOR: #000000" id="nsdef" class=xml_source onfocus=enable_area_timer() onblur=disable_area_timer() onchange=eval_xml() rows=3 cols=40 name="ns_def">
xmlns:ms='http://www.microsoft.com'
</TEXTAREA>
  
</TD>
  
</TR>
  
<TR>
    
<TD vAlign=top width="25%">
      
<H3>XML Content</H3><TEXTAREA onblur=disable_area_timer() style="COLOR: #000000" id=xml class=xml_source onfocus=enable_area_timer() rows=45 onchange=eval_xml() cols=40 name=xml_data>
&lt;library xmlns="http://www.microsoft.com"&gt;
  
&lt;book&gt;
    
&lt;chapter&gt;&lt;/chapter&gt;
    
&lt;chapter&gt;
      
&lt;section&gt;
        
&lt;paragraph a="b"&gt;1&lt;/paragraph&gt;
        
&lt;paragraph a="b"&gt;2&lt;/paragraph&gt;
      
&lt;/section&gt;
    
&lt;/chapter&gt;
  
&lt;/book&gt;
&lt;/library&gt;</TEXTAREA>
      
<BR/>
      Used for all functions.
    
</TD>
    
<TD vAlign=top width="30%" align=left>
        
<H3>XPath/XSL/Schema</H3>
        
<TEXTAREA onblur=disable_area_timer() style="COLOR: #000000" id=xinput class=xml_source onfocus=enable_area_timer() rows=45 onchange=eval_xml() cols=50 name=x_data></TEXTAREA>
        
<BR/>
        Change will be remembered in memory when you switch to another function.
    
</TD>
    
<TD vAlign=top width="30%" align=left>
    
<table>
    
<tr><td>
        
<H3>Result</H3>
        
<TEXTAREA onblur=disable_area_timer() style="COLOR: #000000" id=output class=xml_source onfocus=enable_area_timer() rows=25 onchange=eval_xml() cols=40 name=output_data>
        
</TEXTAREA>
        
</td></tr>
        
<tr><td>
  
<h3>HTML Output</h3>
  
<div id="htmloutput"></div>
        
</td></tr>
    
</table>
    
</TD>
  
</TR>
</TBODY></TABLE></FORM>
<TEXTAREA id="default_xpath">
/ms:library/ms:book/ms:chapter/ms:section/ms:paragraph/@a
</TEXTAREA>

<TEXTAREA id="default_xsl">
&lt;xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:m="http://www.microsoft.com"&gt;

&lt;xsl:template match="/"&gt;
&lt;html&gt;&lt;body&gt;&lt;table&gt;
    
&lt;tr&gt;
    
&lt;td&gt;Attribute&lt;/td&gt;
    
&lt;td&gt;Value&lt;/td&gt;
    
&lt;/tr&gt;
    
&lt;xsl:for-each select="m:library/m:book/m:chapter/m:section/m:paragraph"&gt;
    
&lt;tr&gt;
    
&lt;td&gt;&lt;xsl:value-of select="@a"/&gt;&lt;/td&gt;
    
&lt;td&gt;&lt;xsl:value-of select="."/&gt;&lt;/td&gt;
    
&lt;/tr&gt;
    
&lt;/xsl:for-each&gt;
&lt;/table&gt;&lt;/body&gt;&lt;/html&gt;
&lt;/xsl:template&gt;

&lt;/xsl:stylesheet&gt;</TEXTAREA>

<TEXTAREA id="default_xsd">
&lt;xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.microsoft.com" elementFormDefault="qualified"&gt;

&lt;xs:element name="library"&gt;
&lt;xs:complexType&gt;
&lt;xs:sequence maxOccurs="unbounded"&gt;
&lt;xs:element name="book"&gt;
  
&lt;xs:complexType&gt;
  
&lt;xs:sequence maxOccurs="unbounded"&gt;
  
&lt;xs:element name="chapter"&gt;
    
&lt;xs:complexType&gt;
    
&lt;xs:sequence minOccurs="0" maxOccurs="unbounded"&gt;
    
&lt;xs:element name="section"&gt;
      
&lt;xs:complexType&gt;
      
&lt;xs:sequence maxOccurs="unbounded"&gt;
      
&lt;xs:element name="paragraph"&gt;
        
&lt;xs:complexType&gt;
        
&lt;xs:simpleContent&gt;
        
&lt;xs:extension base="xs:integer"&gt;
          
&lt;xs:attribute name="a" type="xs:string" /&gt;
        
&lt;/xs:extension&gt;
        
&lt;/xs:simpleContent&gt;
        
&lt;/xs:complexType&gt;
      
&lt;/xs:element&gt;
      
&lt;/xs:sequence&gt;
      
&lt;/xs:complexType&gt;
    
&lt;/xs:element&gt;
    
&lt;/xs:sequence&gt;
    
&lt;/xs:complexType&gt;
  
&lt;/xs:element&gt;
  
&lt;/xs:sequence&gt;
  
&lt;/xs:complexType&gt;
&lt;/xs:element&gt;
&lt;/xs:sequence&gt;
&lt;/xs:complexType&gt;
&lt;/xs:element&gt;

&lt;/xs:schema&gt;</TEXTAREA>

<TEXTAREA id="default_xdr">
&lt;Schema xmlns="urn:schemas-microsoft-com:xml-data"&gt;
  
&lt;!-- AttributeType name="xmlns" --&gt;
  
&lt;AttributeType name="a"/&gt;

  
&lt;ElementType name="paragraph"&gt;
    
&lt;attribute type="a"/&gt;
  
&lt;/ElementType&gt;

  
&lt;ElementType name="section" model="closed"&gt;
    
&lt;element type="paragraph"/&gt;
  
&lt;/ElementType&gt;

  
&lt;ElementType name="chapter" model="closed"&gt;
    
&lt;element type="section"/&gt;
  
&lt;/ElementType&gt;

  
&lt;ElementType name="book" model="closed"&gt;
    
&lt;element type="chapter"/&gt;
  
&lt;/ElementType&gt;

  
&lt;ElementType name="library" model="closed"&gt;
    
&lt;element type="book"/&gt;
  
&lt;/ElementType&gt;
&lt;/Schema&gt;</TEXTAREA>
<TABLE align="center">
<TR>
<TD>
    
<B>Created by: MSXML Team. All rights reserved. © 2009 Microsoft. </B>
</TD>
</TR>
</TABLE>
</BODY></HTML>
posted on 2009-05-15 16:46  阿牛-专注金融行业开发 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/rockniu/archive/2009/05/15/1457809.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值