2

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

4

3 回答 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 经验中,这实际上可能是正确转义字符所必需的,或者正如 JLRishe 所建议的那样,这对于 XSLT来说可能是正确的。

Open "C:\users\chris\desktop\TNTLabel.html" For Output As #1
Write #1, strResult
Close #1
于 2013-08-20T05:08:42.387 回答
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

这是我的问题的链接在从 VBA 中的 csv 文件加载数据期间将 2 个双引号替换为 1 个双引号

于 2017-12-21T06:45:52.383 回答
0

如果您在 Excel 中编写 VBA 代码

  1. 将“字符串”写入单元格 - Range("G1") = "string"
  2. 将以下内容放入您的 VBA 代码中

    Cells.Replace What:="""""", Replacement:="""", LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False

  3. 将“字符串”读回变量 - XXX = Range("G1")

  4. Debug.Print 变量,你会看到双引号消失了。我不知道它为什么会起作用......不太在乎......但它确实如此。当我试图将一个 json 字符串从 vba 中组合在一起时发现它。

(它实际上是 Excel 记录宏的输出……我知道我知道 shaaammmeee。我很好……你会回来的)

于 2017-04-21T16:47:06.557 回答