用VBA替换2双引号和1双引号

时间:2013-08-19 20:55:50

标签: xml vba xslt replace double-quotes

我有一个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()),我将不胜感激。

3 个答案:

答案 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中删除:

screenshot

或者,当我使用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代码

  1. 写出&#34;字符串&#34;到一个单元格 - 范围(&#34; G1&#34;)=&#34;字符串&#34;
  2. 将以下内容放入您的VBA代码

    Cells.Replace什么:=&#34;&#34;&#34;&#34;&#34;&#34;,替换:=&#34;&#34;&#34;& #34;,LookAt:= xlPart,_     SearchOrder:= xlByRows,MatchCase:= False,SearchFormat:= False,_     ReplaceFormat:= FALSE

  3. 阅读&#34;字符串&#34;返回变量 - XXX =范围(&#34; G1&#34;)

  4. Debug.Print变量,你会看到双引号消失了。我不知道它为什么会起作用......不用太在意......但确实如此。当我试图将一个json字符串放在vba之外时找到它。
  5. (它实际输出来自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

的链接