标签: msxml

我应该使用哪个版本的MSXML?

这似乎是一个常见的问题,虽然我无法在SO上找到它.

我应该在我的应用程序中使用哪个版本的MSXML,更重要的是,我该如何决定?

有MSXML3,4,5和6.

我最近在使用MSXML v4的call-wcf-service-by-vbscript中发布了一些代码.AnthonyWJones发布我不应该使用4,而是使用3或6,但可能是3.当然不是v5!

为什么?我想更多地了解选择在我的应用中使用的MSXML版本的标准.

奖金问题:有没有人总结过各种版本的MSXML随时间的差异?


截至目前的摘要:

  • MSXML6
    应该是首选.于2006年发布,包括性能和合规性修复.如果可以,请使用此选项.很好.没有合并模块; 为了将MSXML6运行时与您的应用捆绑在一起,MS建议打包MSXML6 msi文件.MSXML6是MSXML3/4的升级版,但不会替换它们,因为它会中断某些功能.你可以在这里获得MSI .
  • MSXML3
    第二选择.部署最广泛的版本.最初于2000年3月发货.积极维护,没有新功能.目前支持,如果您使用SP5(2005年发货)或更高版本.SP7是最新的(也是从2005年开始).
  • MSXML5
    仅作为MS-Office的一部分发布.目前由Microsoft支持,但仅作为Office的一部分,而不是用于构建应用程序.不要构建依赖于MSXML5的应用程序:Verboten.
  • MSXML4
    最初发货?目前处于"维护模式".微软鼓励人们将MSXML4转移到MSXML6.如果您使用的是2003年发布的MSXML4SP2或更高版本,则目前支持.请在此处下载MSXML4SP2 . 可以重新分发.

在Internet Explorer中使用正确版本的MSXML微软xmlteam在博客一个很好的条目.

windows com scripting msxml visual-c++

47
推荐指数
2
解决办法
2万
查看次数

Internet Explorer中的DOM Level 3 XPath

我刚安装IE10在我的Windows 7,而且我发现,即使我很高兴,从AJAX请求个XML现在可以兼容DOM文档,就像一个相当基本的功能document.evaluate仍然不支持.

更糟糕的是,由于这些个XML是不是定制的微软IXMLDocument对象,节点不支持selectNodesselectSingleNode了.最后,似乎IE10不支持DOM Level 3 XPath或MSXML Xpath.

说真的,微软?有什么我想念的吗?

当然,我可以使用querySelectorquerySelectorAll,但我不想失去相当多的向后兼容性.

否则,仍然可以使用此行请求MSXML文档

try {xhr.responseType = "msxml-document";} catch(e) {}
Run Code Online (Sandbox Code Playgroud)

如规定在这里,但我认为这将是很好对付,最后,在IE标准DOM文档了.

那么,有没有办法在IE10中使用带有标准DOM文档的XPath?

更新2013年6月26日 IE11尚未稳定,但仍然不支持document.evaluate.如果它不支持它在稳定的版本,我怀疑它会永远支持它.毋庸置疑,这是荒谬的.

我知道你可以在DOM节点中使用querySelector/ All,但它在IE9及更低版本中不受支持,这仍然是非常常用的,无论如何XPath比选择器更强大.

幸运的是(如果可以这么说),你仍然可以设置xhr.responseType = "msxml-document".有那么一刻,我担心你再也不能那样做了......

更新23/11/2013 IE11现在稳定,但遗憾的是,它不支持document.evaluate.随着重量级XML文档在Web应用程序中越来越少地使用JSON或其他光表示法格式,这变得不那么成问题了,但仍然如此.

设置responseType属性仍然提供遗留的XML文档,所以我猜没有丢失.不过,我不知道IE12是否会成立.

更新15/8/2015现在听起来很荒谬,但Edge现在支持document.evaluate.就在(几乎)一切都切换到JSON进行数据交换时.嗯,迟到总比没有好,我想.

internet-explorer xpath msxml xmldom dom3

32
推荐指数
2
解决办法
2万
查看次数

如何使Microsoft XmlHttpRequest荣誉缓存控制指令

我正在使用MSXML的XmlHttpRequest对象发出请求:

IXMLHttpRequest http = new XmlHttpRequest();
http.open("GET", "http://www.bankofcanada.ca/stat/fx-xml.xml", False, "", "");
http.send();
Run Code Online (Sandbox Code Playgroud)

并且send成功了,我得到了我的xml数据.

除了XmlHttpRequest实际上没有打网络(我可以看到没有发出实际的http请求).并且Process Monitor显示文件实际上是从我的缓存中提供的:

在此输入图像描述

所以我想指示XmlHttpRequest用户代理任何超过0秒的缓存内容都太旧了.执行此操作的标准方法是添加请求标头:

Cache-Control: max-age=0
Run Code Online (Sandbox Code Playgroud)

发送请求:

http = new XmlHttpRequest();
http.open("GET", "http://www.bankofcanada.ca/stat/fx-xml.xml", False, "", "");
http.setRequestHeader("Cache-Control", "max-age=0");
http.send();
Run Code Online (Sandbox Code Playgroud)

并且send成功了,我得到了我的xml数据.

除了XmlHttpRequest实际上没有打网络(我可以看到没有发出实际的http请求).Process Monitor显示文件实际上是从我的缓存中提供的.

那有什么不对?是max-age不是在做什么我想它呢?

来自RFC 2616 - 超文本传输​​协议,第14部分:标题字段定义:

其他指令允许用户代理修改基本过期机制.可以在请求中指定这些指令:

max-age
表示客户端愿意接受年龄不大于指定时间(秒)的响应.除非还包括最大指令,否则客户不愿意接受陈旧的响应.

这正是我想要的.

Cache-Control: max-age=0不是我想要的,或者是MSXML的XmlHttpRequest对象错误?

更新一

这是MSXML XmlHttpRequestCOM对象:

  • CLSID:{88d96a0a-f192-11d4-a65f-0040963251e5}
  • ProgID:Msxml2.XMLHTTP.6.0

更新二

max-age指令由客户端添加,以供所有要遵守的缓存使用.来自RFC:

Cache-Control通用头字段用于指定请求/响应链中的所有缓存机制必须遵守的指令 …

msxml xmlhttprequest cache-control

30
推荐指数
2
解决办法
3万
查看次数

声明早期绑定的MSXML对象会在VBA中引发错误

我试图将xml数据导入excel ..所以代码的第一行是

Dim XMLDOC As MSXML2.DOMDocument

这会给出一个错误"用户定义的类型未定义"

excel scripting vba msxml

29
推荐指数
2
解决办法
6万
查看次数

如何使用VB6和MSXML打印XML源代码?

我几个月来一直在关注这个问题,而且我主要发现网站都在问同样的问题.

我的答案发现总是面向.NET或C++或参与XSLT.

vb6 msxml pretty-print

20
推荐指数
1
解决办法
1万
查看次数

解析MSXML时引用未声明的命名空间前缀

我该如何解决

Reference to undeclared namespace prefix: '%s'
Run Code Online (Sandbox Code Playgroud)

微软的msxml实现问题?


我正在使用来自政府网站的XML Feed,其中包含我需要解析的值.xml包含名称空间:

<?xml version="1.0" encoding="ISO-8859-1"?>
<rdf:RDF
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns="http://purl.org/rss/1.0/"
    xmlns:cb="http://www.cbwiki.net/wiki/index.php/Specification_1.1"
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:dcterms="http://purl.org/dc/terms/"
    xmlns:xsi="http://www.w3c.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.w3c.org/1999/02/22-rdf-syntax-ns#rdf.xsd">
    <item rdf:about="http://www.bankofcanada.ca/stats/rates_rss/STATIC_IEXE0101.xml">
        <cb:statistics>
            <cb:exchangeRate>
                <cb:value decimals="4">1.0351</cb:value>
                <cb:baseCurrency>CAD</cb:baseCurrency>
                <cb:targetCurrency>USD</cb:targetCurrency>
                <cb:rateType>Bank of Canada noon rate</cb:rateType>
                <cb:observationPeriod frequency="daily">2011-05-09T12:15:00-04:00</cb:observationPeriod>
            </cb:exchangeRate>
        </cb:statistics>
    </item>
</rdf:RDF>
Run Code Online (Sandbox Code Playgroud)

运行XPath查询:

/rdf:RDF/item/cb:statistics/cb:exchangeRate/cb:targetCurrency
Run Code Online (Sandbox Code Playgroud)

失败并出现错误:

Reference to undeclared namespace prefix: 'rdf'
Run Code Online (Sandbox Code Playgroud)

编辑:

如果我编辑原始XML以删除所有命名空间的使用:

<?xml version="1.0" encoding="ISO-8859-1"?>
<rdf>
    <item>
        <statistics>
            <exchangeRate>
                <value decimals="4">1.0351</value>
                <baseCurrency>CAD</baseCurrency>
                <targetCurrency>USD</targetCurrency>
                <rateType>Bank of Canada noon rate</rateType>
                <observationPeriod frequency="daily">2011-05-09T12:15:00-04:00</observationPeriod>
            </exchangeRate>
        </statistics>
    </item>
</rdf>
Run Code Online (Sandbox Code Playgroud)

查询/rdf/item/statistics/exchangeRate/baseCurrency不会失败,并返回节点:

<baseCurrency>CAD</baseCurrency>
Run Code Online (Sandbox Code Playgroud)

如何让Microsoft XML与名称空间一起使用? …

msxml xml-namespaces msxml6

16
推荐指数
1
解决办法
3万
查看次数

如何使用MSXML查询默认命名空间

我有一些XML:

<?xml version="1.0" ?>
<Project ToolsVersion="4.0">
    <PropertyGroup Condition="'$(key)'=='1111'">
          <Key>Value</Key>
    </PropertyGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)

注意:这不是我正在使用的实际XML,它只是更漂亮和更短,并演示了这个问题.

使用MSXML我可以查询节点:

IXMLDOMNode node = doc.selectSingleNode("//PropertyGroup/@Condition");
Run Code Online (Sandbox Code Playgroud)

它工作正常:

条件= " '$(密钥)' == '1111'"

但这并不是我所拥有的XML

实际上,我的XML包含一个名称空间声明:

的xmlns = "http://schemas.microsoft.com/developer/msbuild/2003"

制作实际的 XML文档:

<?xml version="1.0" ?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <PropertyGroup Condition="'$(key)'=='1111'">
          <Key>Value</Key>
    </PropertyGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)

现在我的查询:

IDOMNode node = doc.selectSingleNode("//PropertyGroup/@Condition");
Run Code Online (Sandbox Code Playgroud)

不返回匹配的节点.

如何使用MSXML查询默认命名空间?

注意:

如何使用MSXML 查询"默认""未命名"命名空间?


注意:实际上我正在使用SQL Server的XML ShowPlan输出:

<?xml version="1.0" …
Run Code Online (Sandbox Code Playgroud)

msxml xml-namespaces msxml6

13
推荐指数
1
解决办法
7250
查看次数

无法使用MSXML2.ServerXMLHTTP通过HTTPS连接到使用SHA2证书的服务器

我们将SSL证书更新为SHA2,但中间证书为SHA1.Chrome和其他浏览器已经确定整个链必须是SHA2.我们的客户在关注地址栏中的黄色警告.有传言称,在几个月内,Chrome和其他浏览器将以停止屏幕取代轻度不引人注目的谨慎.我们当然不希望这样!

...

所以我们重新颁发了证书,新的证书由SHA2中间人签名.当我们使用该证书加密我们服务器上的流量时,我们使用MSXML2.ServerXMLHTTP(在Windows Server 2003上运行)访问该服务器上的远程Web服务的应用程序无法再连接.

在研究之后,我们应用了这两个看起来可能已解决该问题的修补程序:

https://support.microsoft.com/kb/938397/en-us https://support.microsoft.com/kb/968730/en-us

但问题仍然存在.使用SHA1中间件将证书切换回SHA2,我们没有任何问题.

我们已在受信任的商店中安装了中间SHA2证书,但问题仍然存在.

我们已经尝试指定MSXML2.ServerXMLHTTP的所有版本,但都失败了.

ASP代码:

function query(xml)

    dim xmlhttp, xmlDoc, url

    url = application("component_url")

    set xmlhttp = server.createobject("MSXML2.ServerXMLHttp")
    call xmlhttp.open ("POST", url, false)
    call xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")

    on error resume next
        err.clear   

        call xmlhttp.send(xml)

        if err.number <> 0 then
            call sendAlert("An error has occurred while trying to send your request", message)
        else
            dim rt
            rt = ConvertUtf8BytesToString(xmlhttp.responseBody)
            set xmlDoc = server.createobject("MSXML2.DomDocument")          
            xmlDoc.loadXml(rt)
        end if
    on error goto 0

    set query = xmlDoc
    set xmlHttp …
Run Code Online (Sandbox Code Playgroud)

ssl msxml serverxmlhttp windows-server-2003 asp-classic

12
推荐指数
1
解决办法
4426
查看次数

System.Xml是否使用MSXML?

我正在开发一个C#应用程序,它使用一些XML文件和System.Xml中的一些类.同事坚持在我们的安装中添加MSXML6可再发行组件以及.NET框架,但我认为.NET框架无论如何都不会使用或需要MSXML.我很清楚,不支持使用.NET中的MSXML,但我认为理论上System.Xml本身可以将MSXML包装在较低级别.我没有找到任何确定的.NET有自己的实现,但我也找不到任何暗示需要MSXML的东西.

帮我解决辩论.System.Xml是否使用MSXML?

.net xml msxml

11
推荐指数
1
解决办法
3028
查看次数

如何以独立于平台的方式使用节点集功能?

我正在编写一些我想在linux和Windows下使用的xlst文件.在这个文件中,我使用node-set函数,该函数在不同的命名空间中为MSXML和xsltproc(分别为"urn:schemas-microsoft-com:xslt"和" http://exslt.org/common ")声明.是否有任何平台独立的方式使用节点集?

xml xslt msxml cross-platform

11
推荐指数
3
解决办法
5065
查看次数