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

问题描述 投票:2回答:3

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

xml vba xslt replace double-quotes
3个回答
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

0
投票

如果您在Excel中编写VBA代码

  1. 将“字符串”写入单元格 - 范围(“G1”)=“字符串”
  2. 将以下内容放入VBA代码中 Cells.Replace什么:=“”“”“”,替换:=“”“”,LookAt:= xlPart,_ SearchOrder:= xlByRows,MatchCase:= False,SearchFormat:= False,_ ReplaceFormat:= False
  3. 将“字符串”读回变量 - XXX =范围(“G1”)
  4. Debug.Print变量,你会看到双引号都消失了。我不知道它为什么会起作用......不用太在意......但确实如此。当我试图将一个json字符串放在vba之外时找到它。

(它实际上是从Excel记录输出一个宏...我知道我知道羞耻。我很好......你会回来的)


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的链接

© www.soinside.com 2019 - 2024. All rights reserved.