将 XML 标签转换为特定格式

Convert XML tag to specific format

我有一个 ASP 文件,我必须阅读它。阅读 ASP 文件后,我必须将某些 XML 格式转换为某种特定格式。下面是我的代码:

<%
dim sbixml, html, oHtml, xml, xml_, http, api

<sbixml>
<NetSightMessage>
<Header>
<UserID>GARY</UserID>
<Connection>Production</Connection>
<CurrentLedgers GL="GL" JL="JL"/>
<Mask>POUPPR</Mask>
<SubSystem>Purchasing</SubSystem>
<Trace Enabled="0"/>
<Timeout>30000</Timeout>
</Header>
<Request Type="ScreenXML">
<ScreenXML>
<ProgID>BT20.PENameMaster</ProgID>
</ScreenXML>
</Request>
</NetSightMessage>
</sbixml>

set xml = Server.CreateObject("Microsoft.XMLDOM")
xml.async = false
xml.loadxml sbixml

api = "http://ebparksapp.ebparks.sungardpsasp.com/Finance/xml/schema/custom/ebparks/ebparks.asp?ebparks=" & sbixml
Set http = Server.CreateObject("MSXML2.ServerXMLHTTP.3.0")

http.Open "GET", api, False
http.Send 

set xml_ = Server.CreateObject("Microsoft.XMLDOM")

xml_.loadxml http.responseText

for each Detail in xml_.selectNodes("//Detail")
  response.write "<" & xml.selectsinglenode("//ReportFormat").getAttribute("wrap") & ">"
  for each Det in xml.selectNodes("//Detail")
    response.write "<" & Det.getAttribute("wrap") & ">" & Detail.getAttribute(Det.getAttribute("Prop")) & "</" & Det.getAttribute("wrap") & ">"
  next
  response.write "</" & xml.selectsinglenode("//ReportFormat").getAttribute("wrap") & ">"
next
%>

这是预期的输出:

<%
dim sbixml, html, oHtml, xml, xml_, http, api

sbixml = "<sbixml>" & _
"<NetSightMessage>" & _
"<Header>" & _
"<UserID>GARY</UserID>" & _
"<Connection>Production</Connection>" & _
"<CurrentLedgers GL=""GL"" JL=""JL""/>" & _
"<Mask>POUPPR</Mask>" & _
"<SubSystem>Purchasing</SubSystem>" & _
"<Trace Enabled=""0""/>" & _
"<Timeout>30000</Timeout>" & _
"</Header>" & _
"<Request Type=""ScreenXML"">" & _
"<ScreenXML>" & _
"<ProgID>BT20.POPPvDetail</ProgID>" & _
"</ScreenXML>" & _
"</Request>" & _
"</NetSightMessage>" & _
"</sbixml>"

set xml = Server.CreateObject("Microsoft.XMLDOM")
xml.async = false
xml.loadxml sbixml

api = "http://ebparksapp.ebparks.sungardpsasp.com/Finance/xml/schema/custom/ebparks/ebparks.asp?ebparks=" & sbixml
Set http = Server.CreateObject("MSXML2.ServerXMLHTTP.3.0")

http.Open "GET", api, False
http.Send 

set xml_ = Server.CreateObject("Microsoft.XMLDOM")

xml_.loadxml http.responseText

for each Detail in xml_.selectNodes("//Detail")
  response.write "<" & xml.selectsinglenode("//ReportFormat").getAttribute("wrap") & ">"
  for each Det in xml.selectNodes("//Detail")
    response.write "<" & Det.getAttribute("wrap") & ">" & Detail.getAttribute(Det.getAttribute("Prop")) & "</" & Det.getAttribute("wrap") & ">"
  next
  response.write "</" & xml.selectsinglenode("//ReportFormat").getAttribute("wrap") & ">"
next 
%>

假设你所有的文件都有 XML en bloc 并且每一行都以一个标签开始和结束(即 angular 括号)并且没有它们之间的空白行你可以这样做(使用 replacement function):

foldername = "..."

Function MakeXmlVar(m, sm, pos, src)
  s = Replace(sm, """", """""")
  s = Split(sm, vbNewLine)
  For i = 0 To UBound(s)
    s(i) = """" & s(i) & """"
    If i <> UBound(s) Then s(i) = s(i) & " & _"
  Next
  MakeXmlVar = "sbixml = " & Join(s, vbNewLine)
End Function

Set fso = CreateObject("Scripting.FileSystemObject")

Set re = New RegExp
re.Pattern = "(<.*>(?:\r\n<.*>)*)"

For Each f In fso.GetFolder(foldername).Files
  txt = f.OpenAsTextStream.ReadAll
  f.OpenAsTextStream(2).Write re.Replace(txt, GetRef("MakeXmlVar"))
Next

以下@Ansgar Wiechers 代码有效,只是在我这边修改为读写:-

  foldername = "E:\Code\vbscript\Files"
       Function MakeXmlVar(m, sm, pos, src)
          s = Replace(sm, """", """""")
          s = Split(sm, vbNewLine)
          For i = 0 To UBound(s)
            s(i) = """" & s(i) & """"
            If i <> UBound(s) Then s(i) = s(i) & " & _"
          Next
          MakeXmlVar = "sbixml = " & Join(s, vbNewLine)
        End Function

            Set fso = CreateObject("Scripting.FileSystemObject")

            Set re = New RegExp
            re.Pattern = "(<.*>(?:\r\n<.*>)*)"

            For Each f In fso.GetFolder(foldername).Files

             '***********For Reading*************
                Set objFSO = CreateObject("Scripting.FileSystemObject")

                Set objFile = objFSO.OpenTextFile(f, 1)

                strText = objFile.ReadAll
                objFile.Close

            '************For Writing*************
                Set objFile = objFSO.OpenTextFile(f, 2)
                strNewText=re.Replace(strText, GetRef("MakeXmlVar"))
                objFile.WriteLine strNewText

                objFile.Close

            Next