我有一个TNT XML请求,我从Microsoft Access 2003数据库发送到他们的XML API服务器以检索标签。发回给我的响应必须使用XSLT进行转换。问题是我收到的响应包含每个引用短语的两个双引号而不是一个。我需要修改HTML以使其正常显示,两边都有一个双引号。
举一个例子来说明这个:
<META http-equiv=""Content-Type"" content=""text/html"">
<title>TNT Label</title><script type=""text/javascript"">
if (firstPagePrinted) {
document.writeln('<div class=""pagebreak"">');
document.writeln('<font size=""1"" color=""#FFFFFF"">.</font>');
我尝试过多次使用replace()各种变体。我使用了ASCII Chr(34)表示“,以及Unicode CHrW(&amp; H22)。这些只是我尝试解决这个问题的不成功的几个例子:
Replace(strResult, Chr(34), ChrW(&H22))
Replace(strResult, """", ChrW(&H22))
Replace(strResult, """", "")
这是我用来转换和保存XML文档的代码:
Dim strResponse, strDisplayString, strSQL, desktopPath As String
Dim sTNTXML, sResponseXML, nodeList, strResult
Dim objRequest As New MSXML2.ServerXMLHTTP
objRequest.Open "POST", "https://iConnection.tnt.com/ShipperGate2.asp", False, "", ""
objRequest.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
objRequest.setRequestHeader "Accept", "*/*"
objRequest.setRequestHeader "User-Agent", "ShipperGate_socket/1.0"
objRequest.setRequestHeader "Host", "iConnection.tnt.com"
objRequest.setRequestHeader "Content-Length", CStr(Len(sTNTXML)) + 7
DoCmd.Hourglass True
objRequest.send "xml_in=GET_LABEL:" & modTNTShipping.completeNum
sResponseXML = objRequest.responseText
DoCmd.Hourglass False
Dim mydoc As New MSXML2.DOMDocument60
mydoc.async = False
mydoc.loadXML (sResponseXML)
Dim stylesheet As New MSXML2.DOMDocument60
stylesheet.async = False
stylesheet.Load "http://iconnection.tnt.com:81/Shipper/NewStyleSheets/label.xsl"
Dim result As New MSXML2.DOMDocument60
result.async = False
strResult = mydoc.transformNode(stylesheet)
Dim strQuote As String
strResult = Replace(strResult, Chr(34), ChrW(&H22))
Open "C:\users\chris\desktop\TNTLabel.html" For Output As #1
Write #1, strResult
Close #1
如果有人可以建议缓解这个问题(即使它不使用Replace()),我将不胜感激。
答案 0 :(得分:0)
尝试使用FileSystemObject
来创建文本文件/ html文件:
Public Const strResult As String = "<META http-equiv=""Content-Type"" content=""text/html"">" '"document.writeln('<div class=""pagebreak"">');"
Sub Test()
Dim sFile As String
Dim fso As Object 'Scripting.FileSystemObject
sFile = "C:\users\" & Environ("username") & "\desktop\TNTLabel.html"
Set fso = CreateObject("Scripting.FileSystemObject")
fso.CreateTextFile(Filename:=sFile, Overwrite:=True).Write strResult
Set fso = Nothing
End Sub
这会创建以下文本文件,请注意,没有双引号,我没有使用任何Replace
或其他字符串函数将其从strResult
中删除:
或者,当我使用freefile方法编写文件时,它将其保留为字符串文字,其中双引号需要作为转义字符。我仍然不确定你应该“替换”或删除这些,因为这是一个包含脚本/ javascript的HTML文件,所以你在字符串HTML中有字符串脚本。在我的非常有限的Web / HTML体验中,这可能实际上是正确转义字符所必需的,或者正如JLR所示,也许这个 对XSLT来说是正确的。
Open "C:\users\chris\desktop\TNTLabel.html" For Output As #1
Write #1, strResult
Close #1
答案 1 :(得分:0)
如果您在Excel中编写VBA代码
将以下内容放入您的VBA代码
Cells.Replace什么:=&#34;&#34;&#34;&#34;&#34;&#34;,替换:=&#34;&#34;&#34;& #34;,LookAt:= xlPart,_ SearchOrder:= xlByRows,MatchCase:= False,SearchFormat:= False,_ ReplaceFormat:= FALSE
阅读&#34;字符串&#34;返回变量 - XXX =范围(&#34; G1&#34;)
(它实际输出来自Excel的记录宏...我知道我知道shaaammmeee。我很好......你会回来的)
答案 2 :(得分:0)
对于类似的问题,我使用了代码:
For i = 0 To lastArrayIndex
thisString = columnsDataInThisLine(i)
theFirstStringSymbol = Left(thisString, 1)
If theFirstStringSymbol = """" Then
'Replace double double quotes in the string beginning and _
'the end into single double quotes
thisString = Mid(thisString, 2, Len(thisString) - 2)
End If
columnsDataInThisLine(i) = thisString
Next i
这是指向我的问题Replace 2 double quotes into 1 double quote during data load from csv file in VBA
的链接