对象"MSXML2.ServerXMLHTTP.4.0"来自哪里?哪个安装包?
我正在尝试执行以下操作:
Set oXMLHTTP = CreateObject("MSXML2.ServerXMLHTTP.4.0")
Run Code Online (Sandbox Code Playgroud)
这个尝试在我的开发机器上失败(没有返回任何对象),但它在我的同事的开发机器上是成功的.显然,他安装的东西我没有,反之亦然,但是这个对象,dll等来自何处?
我需要安装什么才能使此调用工作?
对于记录,将对象更改为其他版本不是一种选择,因为此依赖的代码针对此特定版本进行了几天的测试.我们必须再回去测试......
要扩展此问题,如何判断当前安装的MS XML版本?
给出以下XML:
<?xml version="1.0"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<GetMsisdnResponse xmlns="http://my.domain.com/">
<GetMsisdnResult>
<RedirectUrl>http://my.domain.com/cw/DoIdentification.do2?sessionid=71de6551fc13e6625194</RedirectUrl>
</GetMsisdnResult>
</GetMsisdnResponse>
</soap:Body>
</soap:Envelope>
Run Code Online (Sandbox Code Playgroud)
我试图在VBScript中使用XPath访问RedirectUrl元素:
set xml = CreateObject("MSXML2.DOMDocument")
xml.async = false
xml.validateOnParse = false
xml.resolveExternals = false
xml.setProperty "SelectionLanguage", "XPath"
xml.setProperty "SelectionNamespaces", "xmlns:s='http://my.domain.com/' xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'"
err.clear
on error resume next
xml.loadXML (xmlhttp.responseText)
if (err.number = 0) then
redirectUrl = xml.selectSingleNode("/soap:Envelope/soap:Body/s:GetMsisdnResponse/s:GetMsisdnResult/s:RedirectUrl").text
end if
Run Code Online (Sandbox Code Playgroud)
但它找不到RedirectUrl节点,因此当我尝试获取.text属性时没有任何内容.我究竟做错了什么
我有一个经典ASP网站的VB6后端.然后,VB使用MSXML2.XMLHTTP在同一服务器上调用Web服务.这适用于我们所有的服务器但只有一个.如果我将Web服务站点设置为接受匿名登录,则它将起作用,但是如果我仅强制集成安全性,MSXML将返回"拒绝访问"错误.
Set objDom = CreateObject("MSXML2.DOMDocument")
Set objXmlHttp = CreateObject("MSXML2.XMLHTTP")
' Load XML
objDom.async = False
objDom.loadXML XmlBody
' Open the webservice
objXmlHttp.Open "POST", AsmxUrl, False
' Create headings
objXmlHttp.setRequestHeader "Content-Type", "text/xml; charset=utf-8"
objXmlHttp.setRequestHeader "SOAPAction", SoapActionUrl
' Send XML command
objXmlHttp.send objDom.xml
Run Code Online (Sandbox Code Playgroud)
编辑:根据AnthonyWJones的建议,我下了清单,它仍然无法正常工作.使用Fiddler,它显示一个具有401响应的请求.身份验证选项卡显示:
No Proxy-Authenticate Header is present.
WWW-Authenticate Header is present: Negotiate
WWW-Authenticate Header is present: NTLM
Run Code Online (Sandbox Code Playgroud)
我确实注意到了一种奇怪的行为.当我使用登录到远程桌面的用户的凭据来呼叫网站时,它将起作用.我得到谈判,挑战,然后200,它会工作.当用户通过远程桌面登录而不是其他时间登录时,为什么会这样做有什么想法?
我不知道greasemonkey,但我认为这是一种编写或扩展Firefox的方法.
对于IE,有没有一个油脂?
例如:有一个网站托管一个页面,要求我安装MSXML5.0.
替代文字http://i50.tinypic.com/opmgsw.jpg
我不想要MSXML5.0.
我在想,如果我有一个非常棒的功能(如果它是我认为的那样),我就能编写一个将5.0改为6.0的脚本,一切都会很酷.
我知道有一种方法可以在Fiddler中做这种事情,如果我让它运行,并设置为代理.
回答另一个线程(参见stackoverflow:生成css颜色方案)我遇到了下面的问题,其中不同的xsl引擎似乎需要不同的方法将结果树片段转换为节点集.
简化问题(但请参阅上面的链接以了解此背后的完整故事),我希望有一个包含颜色值列表的内联树.由于必须在Xpath表达式中使用,我必须专门为MSXML xx xsl引擎创建一个节点集(内置的XML Spy在解释构造为rtf的变量的Xpath表达式时遇到的麻烦较少).
另一个线程stackoverflow:automating-exsltnode-set帮助我.生成的节点集用于从输入XML创建新变量rtf.
同样,MSXML在Xpath表达式中使用新变量时会抱怨,所以我使用了node-set函数从中创建了一个节点集.
到目前为止一直很好,MSXML xx不再出错.
但是当我在XML Spy内置或Saxon 9he中运行相同时,我得到另一个错误:似乎节点集函数未知:
Cannot find a matching 1-argument function named {urn:schemas-microsoft-com:xslt}node-set() in variable colorList
Run Code Online (Sandbox Code Playgroud)
请注意,在这个特定的例子中不需要这种两步法,但正如我所说的,我简化了一些事情; 我只想知道如何编写一个适用于所有xsl引擎的XSLT 1.0转换.
我使用的XSLT:
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:std="http://whatever"
xmlns:exslt="urn:schemas-microsoft-com:xslt"
exclude-result-prefixes="std exslt">
<xsl:output method="xml" indent="yes"/>
<std:colors>
<color>#0000FF</color>
<color>#FF0000</color>
</std:colors>
<xsl:variable name="colors" select="document('')/*/std:colors"/>
<xsl:variable name="std:colorList">
<xsl:for-each select="//testid">
<xsl:variable name="pos" select="position() mod 2"/>
<xsl:element name="color">
<xsl:attribute name="testid"><xsl:value-of select="."/></xsl:attribute>
<xsl:value-of select="$colors/color[$pos + 1]"/>
</xsl:element>
</xsl:for-each>
</xsl:variable>
<xsl:variable name="colorList" select="exslt:node-set($std:colorList)"/>
<xsl:template match="/">
<output>
<xsl:copy-of …Run Code Online (Sandbox Code Playgroud) 我怎样才能设置doctype一个的DOMDocument60对象?
例如,我尝试:
IXMLDOMDocument60 doc = new DOMDocument60();
doc.doctype.name = "html";
Run Code Online (Sandbox Code Playgroud)
除了IXMLDOMDocumentType.name是只读的:
IXMLDOMDocumentType = interface(IXMLDOMNode)
{
['{2933BF8B-7B36-11D2-B20E-00C04F983E60}']
string Get_name();
...
property String name read Get_name;
}
Run Code Online (Sandbox Code Playgroud)
并且IXMLDOMDocument60.doctype是只读的:
IXMLDOMDocument = interface(IXMLDOMNode)
{
['{2933BF81-7B36-11D2-B20E-00C04F983E60}']
IXMLDOMDocumentType Get_doctype();
...
property IXMLDOMDocumentType doctype read Get_doctype;
}
Run Code Online (Sandbox Code Playgroud)
那么如何设置doctypeXML文档呢?
奖金问题:我如何才能创建一个DOMDocument60与指定的对象doctype?
注意:您没有看到XSLT,因为没有.我正在MSXML中构建一个HTML DOM树.
我想要这样的东西:
<msxsl:script language="C#">
??? getNodes() { ... return ... }
</msxsl:script>
<xsl:for-each select="user:getNodes()">
...
</xsl:for-each>
Run Code Online (Sandbox Code Playgroud)
我应该使用什么返回类型getNodes()以及我应该在它的主体中放入什么?
如何将架构添加到IXMLDOMDocument?
例如,我想生成 XML:
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
<Relationship Id="rId1" Type="Frob" Target="Grob"/>
</Relationships>
Run Code Online (Sandbox Code Playgroud)
我可以构造 DOMDocument60 对象(伪代码):
DOMDocument60 doc = new DOMDocument60();
IXMLDOMElement relationships = doc.appendChild(doc.createElement("Relationships"));
IXMLDOMElement relationship = relationships.appendChild(doc.createElement("Relationship"));
relationship.setAttribute("Id", "rId1");
relationship.setAttribute("Type", "Frob");
relationship.setAttribute("Target", "Grob");
Run Code Online (Sandbox Code Playgroud)
现在是如何添加命名空间的问题。
如果我执行明显的解决方案,请在关系节点上设置一个名为xmlns:
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
Run Code Online (Sandbox Code Playgroud)
通过类似的东西:
relationships.setAttribute("xmlns",
"http://schemas.openxmlformats.org/package/2006/relationships");
Run Code Online (Sandbox Code Playgroud)
文档保存时,导致生成的xml出错:
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
<Relationship Id="rId1" Type="Frob" Target="Grob" xmlns=""/>
</Relationships>
Run Code Online (Sandbox Code Playgroud)
它xmlns在每个其他元素上放置空属性。在这个小测试文档中,它只会错误地应用xmlns到一个元素。在现实世界中,有数十个或数百万个具有空xmlns属性的其他元素。
我尝试设置元素的namespaceURI属性Relationships:
relationshps.namespaceURI := "http://schemas.openxmlformats.org/package/2006/relationships";
Run Code Online (Sandbox Code Playgroud)
但该属性是只读的。
文档确实有一个schemas属性,它获取或设置一个 …
我在使用声明新对象时遇到问题 CreateObject()
Sub A()
Dim x
'This works
Set x = CreateObject("Scripting.FileSystemObject")
Set x = Nothing
'This throws an error 429 "Active component cannot create object."
Set x = CreateObject("MSXML2.DOMDocument60")
Set x = Nothing
'The only way I can create object is to add the reference using GUID
Dim y As MSXML2.DOMDocument60
Set y = New MSXML2.DOMDocument60
Set y = Nothing
'This works like a charm
End Sub
Run Code Online (Sandbox Code Playgroud)
我不明白为什么"脚本"有效,"MSXML2"没有.
我在Windows 7 64位上使用MS Access 2010 32位.
<Root ID="123" Name="Board">
<Element1 name="AAA"/>
<Element2 name="BBB"/>
<Element3 name="CCC"/>
<Element4 name="DDD" Age="56" Address="78"/>
<Nested_Elements>
<Nested Number="125"/>
<Nested Number="250"/>
<Nested Number="500"/>
<Nested Number="1000"/>
</Nested_Elements>
</Root>
Run Code Online (Sandbox Code Playgroud)
我编写了 VBA 代码来导出 XML 并使用 XSLT 样式通过添加以下内容来漂亮地打印它
Set xslDoc = New MSXML2.DOMDocument
xslDoc.LoadXML "<?xml version=" & Chr(34) & "1.0" & Chr(34) & "?>" _
& "<xsl:stylesheet version=" & Chr(34) & "1.0" & Chr(34) _
& " xmlns:xsl=" & Chr(34) & "http://www.w3.org/1999/XSL/Transform" & Chr(34) & ">" _
& " <xsl:strip-space elements=" & Chr(34) & "*" & Chr(34) …Run Code Online (Sandbox Code Playgroud) msxml ×10
xslt ×3
vba ×2
vbscript ×2
xml ×2
.net ×1
access-vba ×1
doctype ×1
greasemonkey ×1
html5 ×1
namespaces ×1
node-set ×1
object ×1
saxon ×1
vb6 ×1
web-services ×1
winapi ×1
xpath ×1