将 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
我有一个 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