将使用XML/XPath的SQL代码转换为VBScript(典型的ASP)

时间:2022-11-26 01:35:25

I want to convert below SQL Server code to VBScript in classic ASP...

我想在经典的ASP中把下面的SQL Server代码转换成VBScript…

DECLARE @idoc int
DECLARE @xdoc nvarchar(4000)
DECLARE @xmldoc xml
Set @xmldoc = '<Root><Authors au_id="409-56-7008" au_lname="Bennet" au_fname="Abraham"><Titles title="The Busy Executive&apos;s Database Guide"/></Authors><Authors au_id="648-92-1872" au_lname="Blotchet-Halls" au_fname="Reginald"><Titles title="Fifty Years in Buckingham Palace Kitchens"/></Authors><Authors au_id="238-95-7766" au_lname="Carson" au_fname="Cheryl"><Titles title="But Is It User Friendly"/></Authors><Authors au_id="722-51-5454" au_lname="DeFrance" au_fname="Michel"><Titles title="The Gourmet Microwave"/></Authors><Authors au_id="712-45-1867" au_lname="del Castillo" au_fname="Innes"><Titles title="Silicon Valley Gastronomic Treats"/></Authors><Authors au_id="427-17-2319" au_lname="Dull" au_fname="Ann"><Titles title="Secrets of Silicon Valley"/></Authors><Authors au_id="267-41-2394" au_lname="Ellis" au_fname="Michael"><Titles title="Cooking with Computers: Surreptitious Balance Sheets"/><Titles title="Sushi for Anyone"/></Authors><Authors au_id="213-46-8915" au_lname="Green" au_fname="Marjorie"><Titles title="The Busy Executive&apos;s Database Guide"/><Titles title="You Can Combat Computer Stress"/></Authors></Root>' 

SELECT 
 Authors.value('./@au_id', 'varchar(20)') as au_id,
 Authors.value('./@au_fname', 'varchar(20)') as au_fname,
 Authors.value('./@au_lname', 'varchar(20)') as au_lname,
 Authors.value('Titles[1]/@title', 'varchar(20)') as Title
FROM 
@xmldoc.nodes('/Root/Authors') as TableValues(Authors)

How write the above code in classic ASP (VBScript)?

如何在经典的ASP (VBScript)中编写上述代码?

Can you help me with this?

你能帮我一下吗?

2 个解决方案

#1


3  

<%

Dim xmldoc
Set xmldoc = Server.CreateObject("MSXML2.DOMDocument.4.0")

xmldoc.SetProperty "SelectionLanguage", "XPath"
''# note the escaped double quotes
xmldoc.LoadXml "<Root><Authors au_id=""409-56-7008"" au_lname=""Bennet"" au_fname=""Abraham""><Titles title=""The Busy Executive&apos;s Database Guide""/></Authors><Authors au_id=""648-92-1872"" au_lname=""Blotchet-Halls"" au_fname=""Reginald""><Titles title=""Fifty Years in Buckingham Palace Kitchens""/></Authors><Authors au_id=""238-95-7766"" au_lname=""Carson"" au_fname=""Cheryl""><Titles title=""But Is It User Friendly""/></Authors><Authors au_id=""722-51-5454"" au_lname=""DeFrance"" au_fname=""Michel""><Titles title=""The Gourmet Microwave""/></Authors><Authors au_id=""712-45-1867"" au_lname=""del Castillo"" au_fname=""Innes""><Titles title=""Silicon Valley Gastronomic Treats""/></Authors><Authors au_id=""427-17-2319"" au_lname=""Dull"" au_fname=""Ann""><Titles title=""Secrets of Silicon Valley""/></Authors><Authors au_id=""267-41-2394"" au_lname=""Ellis"" au_fname=""Michael""><Titles title=""Cooking with Computers: Surreptitious Balance Sheets""/><Titles title=""Sushi for Anyone""/></Authors><Authors au_id=""213-46-8915"" au_lname=""Green"" au_fname=""Marjorie""><Titles title=""The Busy Executive&apos;s Database Guide""/><Titles title=""You Can Combat Computer Stress""/></Authors></Root>"

Dim Author

Response.Write "<table>" & vbNewLine
For Each Author In xmldoc.SelectNodes("/Root/Authors")
  Response.Write "<tr>" & vbNewLine
  WriteTableCell Author.GetAttribute("au_id")
  WriteTableCell Author.GetAttribute("au_fname")
  WriteTableCell Author.GetAttribute("au_lname")
  WriteTableCell Author.SelectSingleNode("Titles[1]/@title")
  Response.Write "</tr>" & vbNewLine
Next
Response.Write "</table>" & vbNewLine

''# table cell output factored into a Sub, for reuse and cleaner code
Sub WriteTableCell(xmldata)
  Dim s

  If IsObject(xmldata) Then
    If xmldata Is Nothing Then
      s = ""
    Else
      s = xmldata.text
    End If
  Else
    s = CStr(xmldata)
  End If

  Response.Write "<td>" & Server.HTMLEncode(s) & "</td>" & vbNewLine
End Sub

%>

Tested, works.

测试工作。

#2


3  

I would suggest encapsulating this logic into a stored procedure. Then simply call this sproc from your classic asp page. You'll be spending far too much time converting this logic from SQL Server's built in XML parsing capabilities to VBScript. VBScript doesn't have a rich set of functionality to parse xml documents.

我建议将该逻辑封装到一个存储过程中。然后简单地从您的经典asp页面调用这个sproc。您将花费大量时间将SQL Server内置的XML解析功能转换为VBScript。VBScript没有丰富的功能来解析xml文档。

Use the best tool for the job. If there is a management constraint, perhaps try to appeal to someone's sense of sanity. I know this doesn't answer your specific question as you might have expected.

使用最好的工具完成工作。如果有管理上的限制,或许可以试着去迎合某些人的理智。我知道这并不能回答你的问题。

 Create Procedure GetAuthors

AS 
    DECLARE @idoc int ,
            @xdoc nvarchar(4000) ,
            @xmldoc xml 

    SELECT @xmldoc = ''


    SELECT Authors.value('./@au_id', 'varchar(20)') as au_id, 
    Authors.value('./@au_fname', 'varchar(20)') as au_fname, 
    Authors.value('./@au_lname', 'varchar(20)') as au_lname, 
    Authors.value('Titles[1]/@title', 'varchar(20)') as Title 
    FROM @xmldoc.nodes('/Root/Authors') as TableValues(Authors)

#1


3  

<%

Dim xmldoc
Set xmldoc = Server.CreateObject("MSXML2.DOMDocument.4.0")

xmldoc.SetProperty "SelectionLanguage", "XPath"
''# note the escaped double quotes
xmldoc.LoadXml "<Root><Authors au_id=""409-56-7008"" au_lname=""Bennet"" au_fname=""Abraham""><Titles title=""The Busy Executive&apos;s Database Guide""/></Authors><Authors au_id=""648-92-1872"" au_lname=""Blotchet-Halls"" au_fname=""Reginald""><Titles title=""Fifty Years in Buckingham Palace Kitchens""/></Authors><Authors au_id=""238-95-7766"" au_lname=""Carson"" au_fname=""Cheryl""><Titles title=""But Is It User Friendly""/></Authors><Authors au_id=""722-51-5454"" au_lname=""DeFrance"" au_fname=""Michel""><Titles title=""The Gourmet Microwave""/></Authors><Authors au_id=""712-45-1867"" au_lname=""del Castillo"" au_fname=""Innes""><Titles title=""Silicon Valley Gastronomic Treats""/></Authors><Authors au_id=""427-17-2319"" au_lname=""Dull"" au_fname=""Ann""><Titles title=""Secrets of Silicon Valley""/></Authors><Authors au_id=""267-41-2394"" au_lname=""Ellis"" au_fname=""Michael""><Titles title=""Cooking with Computers: Surreptitious Balance Sheets""/><Titles title=""Sushi for Anyone""/></Authors><Authors au_id=""213-46-8915"" au_lname=""Green"" au_fname=""Marjorie""><Titles title=""The Busy Executive&apos;s Database Guide""/><Titles title=""You Can Combat Computer Stress""/></Authors></Root>"

Dim Author

Response.Write "<table>" & vbNewLine
For Each Author In xmldoc.SelectNodes("/Root/Authors")
  Response.Write "<tr>" & vbNewLine
  WriteTableCell Author.GetAttribute("au_id")
  WriteTableCell Author.GetAttribute("au_fname")
  WriteTableCell Author.GetAttribute("au_lname")
  WriteTableCell Author.SelectSingleNode("Titles[1]/@title")
  Response.Write "</tr>" & vbNewLine
Next
Response.Write "</table>" & vbNewLine

''# table cell output factored into a Sub, for reuse and cleaner code
Sub WriteTableCell(xmldata)
  Dim s

  If IsObject(xmldata) Then
    If xmldata Is Nothing Then
      s = ""
    Else
      s = xmldata.text
    End If
  Else
    s = CStr(xmldata)
  End If

  Response.Write "<td>" & Server.HTMLEncode(s) & "</td>" & vbNewLine
End Sub

%>

Tested, works.

测试工作。

#2


3  

I would suggest encapsulating this logic into a stored procedure. Then simply call this sproc from your classic asp page. You'll be spending far too much time converting this logic from SQL Server's built in XML parsing capabilities to VBScript. VBScript doesn't have a rich set of functionality to parse xml documents.

我建议将该逻辑封装到一个存储过程中。然后简单地从您的经典asp页面调用这个sproc。您将花费大量时间将SQL Server内置的XML解析功能转换为VBScript。VBScript没有丰富的功能来解析xml文档。

Use the best tool for the job. If there is a management constraint, perhaps try to appeal to someone's sense of sanity. I know this doesn't answer your specific question as you might have expected.

使用最好的工具完成工作。如果有管理上的限制,或许可以试着去迎合某些人的理智。我知道这并不能回答你的问题。

 Create Procedure GetAuthors

AS 
    DECLARE @idoc int ,
            @xdoc nvarchar(4000) ,
            @xmldoc xml 

    SELECT @xmldoc = ''


    SELECT Authors.value('./@au_id', 'varchar(20)') as au_id, 
    Authors.value('./@au_fname', 'varchar(20)') as au_fname, 
    Authors.value('./@au_lname', 'varchar(20)') as au_lname, 
    Authors.value('Titles[1]/@title', 'varchar(20)') as Title 
    FROM @xmldoc.nodes('/Root/Authors') as TableValues(Authors)