我正在开发一个C#应用程序,它使用一些XML文件和System.Xml中的一些类.同事坚持在我们的安装中添加MSXML6可再发行组件以及.NET框架,但我认为.NET框架无论如何都不会使用或需要MSXML.我很清楚,不支持使用.NET中的MSXML,但我认为理论上System.Xml本身可以将MSXML包装在较低级别.我没有找到任何确定的.NET有自己的实现,但我也找不到任何暗示需要MSXML的东西.
帮我解决辩论.System.Xml是否使用MSXML?
有一个配置的WCF服务:
<services>
<service name="MyService" behaviorConfiguration="MyServiceBehavior">
<endpoint
binding="basicHttpBinding"
contract="IMyService" />
<host>
<baseAddresses>
<add baseAddress="http://localhost:8001/MyService" />
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="MyServiceBehavior">
<serviceMetadata httpGetEnabled="True" />
</behavior>
</serviceBehaviors>
</behaviors>
Run Code Online (Sandbox Code Playgroud)
这个脚本应该调用它:
Option Explicit
Dim soapClient
Dim serviceUri
Dim serviceName
Dim portName
Dim result
serviceUri = "http://localhost:8001/MyService"
serviceName = "MyService"
portName = "BasicHttpBinding_IMyService"
Set soapClient = CreateObject("MSSOAP.soapClient")
soapClient.ClientProperty("ServerHTTPRequest") = True
soapClient.mssoapinit serviceUri & "?WSDL", serviceName, portName
Run Code Online (Sandbox Code Playgroud)
运行脚本时出现此错误:
客户端:WSDLReader:分析WSDL文件失败HRESULT = 0x8 0004005 - WSDLReader:服务初始化失败HRESULT = 0x80004005 - WSDL服务:服务端口初始化服务MyService失败HRESULT = 0x80004005 - WSDLPort:分析端口BasicHttpBinding_IMyService的绑定信息失败HRESULT = 0x80004005 …
我一直在尝试使用IE自动化谷歌搜索Excel中的一串文本.我想在excel中的另一个单元格中返回第一个结果的网站的超链接.这可能吗?我有一个包含60,000条记录的列表,我需要谷歌搜索并在第一个结果中返回网站的超链接.你会推荐另一种解决方法吗?我提前感谢你的帮助.
以下代码有效.但是,如果我注释掉该行Dim objRequest As MSXML2.XMLHTTP
并取消注释该行,Dim objRequest As Object
则会失败并显示错误消息:
参数不正确
为什么,以及我可以做些什么(如果有的话)?
Public Function GetSessionId(strApiId, strUserName, strPassword) As String
Dim strPostData As String
Dim objRequest As MSXML2.XMLHTTP
'Dim objRequest As Object '
strPostData = "api_id=" & strApiId & "&user=" & strUserName & "&password=" & strPassword
Set objRequest = New MSXML2.XMLHTTP
With objRequest
.Open "POST", "https://api.clickatell.com/http/auth", False
.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
.send strPostData
GetSessionId = .responseText
End With
End Function
Run Code Online (Sandbox Code Playgroud)
Corey,是的,我知道我必须这样做才能使我的代码在没有引用MSXML类型库的情况下工作.这不是问题所在.Dim objRequest As Object
无论我是否使用,代码在使用时都会失败
Set objRequest = NEW MSXML2.XMLHTTP …
当XMLDOMDocument自行保存时,如何让它包含XML声明,例如:
<?xml version="1.0" encoding="UTF-8" ?>
<?xml version="1.0" encoding="UTF-16" ?>
<?xml version="1.0" encoding="UCS-2" ?>
<?xml version="1.0" encoding="UCS-4" ?>
<?xml version="1.0" encoding="ISO-10646-UCS-2" ?>
<?xml version="1.0" encoding="UNICODE-1-1-UTF-8" ?>
<?xml version="1.0" encoding="UNICODE-2-0-UTF-16" ?>
<?xml version="1.0" encoding="UNICODE-2-0-UTF-8" ?>
<?xml version="1.0" encoding="US-ASCII" ?>
<?xml version="1.0" encoding="ISO-8859-1" ?>
<?xml version="1.0" encoding="WINDOWS-1250" ?>
XMLDOMDomcument对象正在内存中创建(即xml不是从某些外部源加载的):
{
IXMLDOMDocument2 doc = new DOMDocument60();
//add nodes to the doc
...
doc.Save(saveTarget);
}
Run Code Online (Sandbox Code Playgroud)
没有xml声明,你只能获得body xml,例如:
<Customer>
...
</Customer>
Run Code Online (Sandbox Code Playgroud)
而不是完整的XML文档:
<?xml version="1.0" encoding="US-ASCII" ?>
<Customer>
...
</Customer>
Run Code Online (Sandbox Code Playgroud)
如何控制XMLDOMDocument在保存到流时将使用的编码 …
Windows有许多可以并排安装的MSXML版本.即第3,4,5和6号.
我必须找到系统中存在哪个msxml文件.我的查询仅限于注册表.
我有一个从MSXML DOM中提取的变量bstr,所以它是UTF-16.我试图找出此转换发生的默认编码:
VARIANT vtNodeValue;
pNode->get_nodeValue(&vtNodeValue);
string strValue = (char*)_bstr_t(vtNodeValue);
Run Code Online (Sandbox Code Playgroud)
从测试来看,我认为默认编码是Windows-1252或Ascii,但我不确定.
顺便说一句,这是我正在修复的代码块,并将变量转换为wstring,并通过调用WideCharToMultiByte进行多字节编码.
谢谢!
我正在尝试从webserver获取xml数据到excel,然后我写了一个sendRequest
函数来调用excel
=sendRequest("http://abb.com/index.php?id=111")
当网络服务器出现问题,无法连接或无法找到时,excel没有响应,这太可怕了!为了避免它,我认为我们应该设置timeOut.这些是我的功能:
Function sendRequest(Url)
'Call service
Set XMLHTTP = CreateObject("Msxml2.ServerXMLHTTP.6.0")
'Timeout values are in milli-seconds
lResolve = 10 * 1000
lConnect = 10 * 1000
lSend = 10 * 1000
lReceive = 15 * 1000 'waiting time to receive data from server
XMLHTTP.setTimeOuts lResolve, lConnect, lSend, lReceive
XMLHTTP.OnTimeOut = OnTimeOutMessage 'callback function
XMLHTTP.Open "GET", Url, False
On Error Resume Next
XMLHTTP.Send
On Error GoTo 0
sendRequest = (XMLHTTP.responseText)
End Function
Private Function OnTimeOutMessage()
'Application.Caller.Value = "Server error: …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用VBA循环使用以下简单的XML,最终目标是能够轻松地按顺序提取数据.
<?xml version="1.0"?>
<PMRData>
<Staff StaffName="Person 1">
<Openings>1.1</Openings>
<Closures>1.11</Closures>
</Staff>
<Staff StaffName="Person 2">
<Openings>1.2</Openings>
<Closures>1.22</Closures>
</Staff>
<Staff StaffName="Person 3">
<Openings>1.3</Openings>
<Closures>1.33</Closures>
</Staff>
</PMRData>
Run Code Online (Sandbox Code Playgroud)
到目前为止,我的代码设法将数据导入立即窗口,但不是按照我需要的顺序.它应该是:员工姓名Person1开口1.1关闭1.11员工姓名人员2开口2.2关闭2.22等
意思是我需要使我的递归函数具体,而不是为所有节点循环.任何帮助将不胜感激!这就是我到目前为止......
Dim xDoc As DOMDocument
Set xDoc = New DOMDocument
Dim xNode As IXMLDOMNode
Dim xElem As IXMLDOMElement
Dim xElemCount As Integer
Dim xSub As IXMLDOMElement
Dim Nodes As IXMLDOMNodeList
Set xElem = xDoc.SelectSingleNode("//PMRData")
Range("a1").Select
xElemCount = xElem.ChildNodes.Length
Debug.Print "xElem has " & xElemCount & " Nodes"
For Each xSub In xElem.ChildNodes
If xSub.Attributes.Length > 0 …
Run Code Online (Sandbox Code Playgroud) 我试图从finance.yahoo.com下载千年股票的历史股票价格数据.该网站仅在一个页面上显示60天的数据,因此我必须循环浏览我下载的时间段以及不同证券的循环.我使用以下代码访问相关页面.
Set httpObject = CreateObject("MSXML2.XMLHTTP")
httpObject.Open "GET", url, False
httpObject.send
webObject.body.innerHTML = httpObject.responseText
Run Code Online (Sandbox Code Playgroud)
这就像我访问的99%数据的魅力.但是,不时地,网站返回的对象都是空的,即使完全相同的URL会在Internet Explorer中显示正确的数据.如果我重新运行该URL的代码,则下次可能会或可能不会失败.
我想知道是否有更稳定/一致的方式使用上述方法.我之前已经实现了InternetExplorer.Application方法来下载数据,但发现它要慢得多,也很麻烦.