Javascript 如何直观地格式化远程服务器XML查询响应?

Javascript 如何直观地格式化远程服务器XML查询响应?,javascript,asp.net,xml,xslt,Javascript,Asp.net,Xml,Xslt,在这之前,我会说我是一个非常业余的网络开发人员 我有一个web设备,它在发出查询字符串时提供XML数据,例如: https://example.com/api/reporting.ns?username=name&password=password&generate_report=SupportSession&start_date=2009-04-01&duration=0&limit=all 我创建了一个简单的表单,允许用户修改此查询的值并返回相应的X

在这之前,我会说我是一个非常业余的网络开发人员

我有一个web设备,它在发出查询字符串时提供XML数据,例如:

https://example.com/api/reporting.ns?username=name&password=password&generate_report=SupportSession&start_date=2009-04-01&duration=0&limit=all
我创建了一个简单的表单,允许用户修改此查询的值并返回相应的XML。这是表格:

<form id= "report" action="https://example.com/api/reporting.ns?" name="report">
Username: <input name="username"><br />
Password: <input type="password" name="password"><br />
<input type="hidden" name="generate_report" value="SupportSession">
Start Date: <input name="start_date">
<input type="hidden" name="duration" value="0">
<input type="hidden" name="limit" value="all">
<input type="submit" value="Show Report">
它可以在本地工作,但我遇到了跨域安全问题,因为web设备被加固,我无法在其上放置任何代码

我已经在这个网站和网络上搜索了几天,寻找一种使用其他方法[asp?]来实现这一点的方法,但基本上没有成功。主要原因是我不知道asp,所以我不知道如何攻击它

我认为在表单中创建查询字符串,然后将结果xml响应从web设备加载到字符串,并将驻留在服务器上的XSLT应用到该字符串可能是一种选择,但无法使其工作;又是因为我不确定自己在做什么

这是我的XSLT:

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<div class="contentBox"> -->
  <h2>Sessions</h2>
    <table class="wide grid padding">
      <thead>
          <tr>
        <th>Session ID</th>
        <th>Started</th>
        <th>Duration</th>
        <th>Public Site</th>
        <th>CTS Ticket Number</th>
        <th>Customer's Name</th>
        <th>Customer's Operating System</th>
        <th>Representative's Name</th>
        <th>Chat Transcript Download</th>        
          </tr>
        </thead>

      <xsl:for-each select="session_list/session">
      <xsl:if test="customer_list/customer/os='Windows® (x86) Click-To-Chat'">
      <tr>
    <td><xsl:value-of select="@lsid"/></td>
    <td><xsl:value-of select="start_time"/></td>
    <td><xsl:value-of select="duration"/></td>
    <td><xsl:value-of select="public_site"/></td>
    <td><xsl:value-of select="external_key"/></td>
    <td><xsl:value-of select="primary_customer"/></td>
    <td><xsl:value-of select="customer_list/customer/os"/></td>
    <td><xsl:value-of select="primary_rep"/></td>
    <td><a target="_blank" href="{session_chat_download_url}">Download Chat</a></td>        
      </tr>
      </xsl:if>
      </xsl:for-each>
    </table>
</xsl:template>
</xsl:stylesheet>

-->
会议
会话ID
起动
期间
公共场所
中旅车票号码
客户姓名
客户的操作系统
代表姓名
聊天记录下载
以及web设备输出的XML片段:

<?xml version="1.0" encoding="UTF-8"?>
<session_list xmlns="http://www.networkstreaming.com/namespaces/API" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<session lsid="fef672741e025ffda1acb3041f09252d">
<session_type>support</session_type>
<lseq>2899</lseq>
<start_time timestamp="1290027608">2010-11-17T16:00:08-05:00</start_time>
<end_time timestamp="1290027616">2010-11-17T16:00:16-05:00</end_time>
<duration>00:00:08</duration>

<public_site id="1">Default</public_site>
<external_key></external_key>
<session_chat_view_url>https://mysite.com/session_download.ns?lsid=l%3Dfef672741e025ffda1acb3041f09252d%3Bh%3D9bd6081f0b7fee08dcc32a58ef4cb54c7a0e233d%3Bt%3Dsd%3Bm%3Dchat&amp;dl_action=chat&amp;view=1&amp;sessionType=sd</session_chat_view_url>
<session_chat_download_url>https://mysite.com/session_download.ns?lsid=l%3Dfef672741e025ffda1acb3041f09252d%3Bh%3D9bd6081f0b7fee08dcc32a58ef4cb54c7a0e233d%3Bt%3Dsd%3Bm%3Dchat&amp;dl_action=chat&amp;sessionType=sd</session_chat_download_url>
<file_transfer_count>0</file_transfer_count>

<primary_customer gsnumber="3">Smith, John</primary_customer>
<customer_list>
<customer gsnumber="3">
<username>Smith, John</username>
<public_ip>xxx.xxx.xxx.xxx</public_ip>
<private_ip>xxx.xxx.xxx.xxx</private_ip>
<hostname>DESKTOP</hostname>

<os>Windows 7 Enterprise x64 Edition (Build 7600)</os>
<primary_cust>1</primary_cust>
<info>
    <name></name>
    <company></company>
    <company_code></company_code>
    <issue></issue>
    <details></details>

</info>

支持
2899
2010-11-17T16:00:08-05:00
2010-11-17T16:00:16-05:00
00:00:08
违约
https://mysite.com/session_download.ns?lsid=l%3Dfef672741e025ffda1acb3041f09252d%3Bh%3D9bd6081f0b7fee08dcc32a58ef4cb54c7a0e233d%3Bt%3Dsd%3Bm%3Dchat&dl_action=聊天和;视图=1&;sessionType=sd
https://mysite.com/session_download.ns?lsid=l%3Dfef672741e025ffda1acb3041f09252d%3Bh%3D9bd6081f0b7fee08dcc32a58ef4cb54c7a0e233d%3Bt%3Dsd%3Bm%3Dchat&dl_action=聊天和;sessionType=sd
0
史密斯,约翰
史密斯,约翰
xxx.xxx.xxx.xxx
xxx.xxx.xxx.xxx
桌面
Windows 7企业版x64版(版本7600)
1.

进一步资料:

我在asp中找到了一种检索远程xml的方法,该方法可以像
http://example.com/file.xml
但不适用于我的URL。也许是因为这是一个疑问?我已经研究了编码/封装我的URL的方法,但还没有找到任何有效的方法

如果您能提供任何帮助,我们将不胜感激


谢谢

以下是我是如何做到这一点的。这是骇客,可怕的代码,即使我可以告诉需要优化,但它的工作。我使用一个xslt将响应转换为屏幕,另一个xslt将响应转换为csv

<script language="VB" runat="server">
Sub Page_Load (sender As Object, e As EventArgs)
End Sub

' Show report on page routine
Public Sub show(Source As Object, e As EventArgs)
Try
Date.ParseExact(start_date.Text.ToString(), "yyyy-mm-dd", System.Globalization.DateTimeFormatInfo.InvariantInfo)
Catch p As FormatException
   Console.WriteLine("{0} is not in the correct format.", start_date.Text.ToString())
End Try

Dim url
url = "https://mysite.com/api/reporting.ns?" & "username=" & username.Text & "&password=" & password.Text & "&generate_report=SupportSession" & "&start_date=" & start_date.Text & "&duration=" & duration.Text & "&limit=all"
myXml.Document = getXML(url)
End sub

' Download report to excel csv routine
Public Sub download(Source As Object, e As EventArgs)
Try
Date.ParseExact(start_date.Text.ToString(), "yyyy-mm-dd",     System.Globalization.DateTimeFormatInfo.InvariantInfo)
Catch p As FormatException
   Console.WriteLine("{0} is not in the correct format.", start_date.Text.ToString())
End Try

Dim url
url = "https://mysite.com/api/reporting.ns?" & "username=" & username.Text & "&password=" & password.Text & "&generate_report=SupportSession" & "&start_date=" & start_date.Text & "&duration=" & duration.Text & "&limit=all"
csv.Document = dlXML(url)
End sub

' Reset form
Public Sub reset(Source As Object, e As EventArgs)
username.Text = ""
password.Text = ""
start_date.Text = ""
duration.Text = "0"
End sub

' Create Popup Calendar and associated Panel
Private Sub Calendar1_SelectionChanged(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Calendar1.SelectionChanged
Start_date.Text = Calendar1.SelectedDate
End Sub 

Public Sub panel(Source As Object, e As EventArgs)
panel1.Visible = Not panel1.Visible
If panel1.Visible = "True"
selDate.Text = "Close"
Else
selDate.Text = "Select Date"
End If
End Sub

' Show report on page routine
Function getXML(sourceFile As String) 
Dim myRequest As System.Net.WebRequest = System.Net.WebRequest.Create(sourceFile)
Dim myResponse As System.Net.WebResponse = myRequest.GetResponse()
Dim myReader As System.Xml.XmlTextReader = new System.Xml.XmlTextReader(myResponse.GetResponseStream())
Dim doc As System.Xml.XmlDocument = New System.Xml.XmlDocument()
doc.Load(myReader)

getXML = doc
End Function

' Download report to excel csv routine
Function dlXML(sourceFile As String)

Dim myRequest As System.Net.WebRequest = System.Net.WebRequest.Create(sourceFile)
Dim myResponse As System.Net.WebResponse = myRequest.GetResponse()
Dim myReader As System.Xml.XmlTextReader = new System.Xml.XmlTextReader(myResponse.GetResponseStream())
Dim doc As System.Xml.XmlDocument = New System.Xml.XmlDocument()

doc.Load(myReader)

Dim xslt As New System.Xml.Xsl.XslCompiledTransform() 'Pass in true to enable XSLT Debugging
xslt.Load(Server.MapPath("csv.xslt"))

xslt.Transform(new System.Xml.XmlNodeReader(doc), New System.Xml.XmlTextWriter(Response.Output)) 

Response.ContentType = "text/csv"
Response.AppendHeader("Content-Disposition", "attachment; filename=Report.csv")
Response.End()

End Function

</script>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<link rel="stylesheet" type="text/css" href="screen.css"/>
<title>MySite</title>
</head>

<body>

<div id="container" style="width: 86em;"> 
<div id="header" class="contentBox" style="padding-top: 5px; padding-bottom: 30px; border-bottom-width: 2px;">
<div ;="" style="margin: 0px 0pt; height: 100px;">
 <span style="height: 80px; float: left;">
  <a target="_blank" href="https://mysite.com">
<img alt="Logo" src="Logo.png" id="logo">
  </a>
 </span>
<div style="text-align: right; line-height: 1.5em; padding-top: 35px;" class="pageTitle">MySite</div>
</div>
</div>
<div id="sessionKeyBox" class="contentBox">
<h1 class="sectionTitle">Complete Form</h1>
<form id= "lc" method ="post" runat="server">
<div id="form">
<table>
<tr><td align="right"><asp:Label AssociatedControlId="start_date" Text="Start Date:" runat="server" /></td>
<td align="right"><asp:TextBox id="start_date" runat="server"/></td><td><asp:LinkButton id="selDate" onClick="panel" Text="Select Date" runat="server" /></td></tr>
<tr><td align="right"><asp:Label AssociatedControlId="duration" Text="Days:" runat="server" /></td>
<td align="right"><asp:TextBox id="duration" runat="server"/></td><td style="font-size:80%">Use 0 days for start day to present</td></tr>
<tr><td align="right"><asp:Label AssociatedControlId="username" Text="Username:" runat="server" /></td>
<td align="right"><asp:TextBox id="username" runat="server"/></td></tr>
<tr><td align="right"><asp:Label AssociatedControlId="password" Text="Password:" runat="server" /></td>
<td align="right"><asp:TextBox id="password" TextMode="password" runat="server"/></td></tr>
<tr><td /><td align="right"><asp:Button OnClick="show" Text="Show Report" runat="server" /> <asp:Button  Onclick="reset" Text="Reset" runat="server" /> </td></tr>
<tr><td></td><td align="right"><asp:Button OnClick="download" Text="Download Report" runat="server" /></td></tr>
</table>
<asp:Panel id="Panel1" runat="Server" CssClass="toggleCal" visible="false" HorizontalAlign="center">
<asp:Calendar ID="Calendar1" runat="server" /><asp:LinkButton onClick="panel" Text="Close" runat="server" />
</asp:Panel>
</div>
</div>
</div>
</form>

<asp:Xml id="myXml" transformsource="screen.xsl" runat="server" />
<asp:Xml id="csv" runat="server" />

</body>
</html>

子页面加载(发送方作为对象,e作为事件参数)
端接头
'在页面上显示报告例程
公共子节目(源作为对象,e作为事件参数)
尝试
Date.ParseExact(start_Date.Text.ToString(),“yyyy-mm-dd”,System.Globalization.DateTimeFormatInfo.InvariantInfo)
捕获p作为格式化异常
Console.WriteLine(“{0}格式不正确。”,start_date.Text.ToString()
结束尝试
暗url
url=”https://mysite.com/api/reporting.ns?“&”username=“&username.Text&”&password=“&password.Text&”&generate\u report=SupportSession“&”&start\u date=“&start\u date.Text&”&duration=“&duration.Text&”&limit=all”
myXml.Document=getXML(url)
端接头
'将报告下载到excel csv例程
公共子下载(源作为对象,e作为事件参数)
尝试
Date.ParseExact(start_Date.Text.ToString(),“yyyy-mm-dd”,System.Globalization.DateTimeFormatInfo.InvariantInfo)
捕获p作为格式化异常
Console.WriteLine(“{0}格式不正确。”,start_date.Text.ToString()
结束尝试
暗url
url=”https://mysite.com/api/reporting.ns?“&”username=“&username.Text&”&password=“&password.Text&”&generate\u report=SupportSession“&”&start\u date=“&start\u date.Text&”&duration=“&duration.Text&”&limit=all”
csv.Document=dlXML(url)
端接头
“重置表单
公共子重置(源作为对象,e作为事件参数)
username.Text=“”
password.Text=“”
start_date.Text=“”
duration.Text=“0”
端接头
'创建弹出式日历和相关面板
私有子日历1\u选择已更改(ByVal发件人作为System.Object_
ByVal e作为System.EventArgs)处理日历1.SelectionChanged
开始日期Text=Calendar1.SelectedDate
端接头
公共子面板(源作为对象,e作为事件参数)
panel1.可见=不可见panel1.可见
如果面板1.Visible=“True”
selDate.Text=“关闭”
其他的
selDate.Text=“选择日期”
如果结束
端接头
'在页面上显示报告例程
函数getXML(源文件为字符串)
将myRequest设置为System.Net.WebRequest=System.Net.WebRequest.Create(源文件)
Dim myResponse As System.Net.WebResponse=myRequest.GetResponse()
Dim myReader As System.Xml.XmlTextReader=new System.Xml.XmlTextReader(myResponse.GetResponseStream())
Dim doc As System.Xml.XmlDocument=New System.Xml.XmlDocument()
文档加载(myReader)
getXML=doc
端函数
'将报告下载到excel csv例程
函数dlXML(源文件为字符串)
将myRequest设置为System.Net.WebRequest=System.Net.WebRequest.Create(源文件)
Dim myResponse As System.Net.WebResponse=myRequest.GetResponse()
Dim myReader As System.Xml.XmlTextReader=new System.Xml.XmlTextReader(myResponse.GetResponseStream())
Dim doc As System.Xml.XmlDocument=New System.Xml.XmlDocument()
文档加载(myReader)
将xslt设置为New System.Xml.Xsl.xslcomiledTransform()'传入true以启用xslt调试
Load(Server.MapPath(“csv.xslt”))
Transform(new System.Xml.XmlNodeReader(doc),new System.Xml.XmlTextWriter(Response.Output))
Response.ContentType=“text/csv”
AppendHeader(“内容处置”、“附件;文件名=Report.csv”)
答复:End()
端函数
麦斯特
麦斯特
完整形式
使用0天作为开始日期以显示
<script language="VB" runat="server">
Sub Page_Load (sender As Object, e As EventArgs)
End Sub

' Show report on page routine
Public Sub show(Source As Object, e As EventArgs)
Try
Date.ParseExact(start_date.Text.ToString(), "yyyy-mm-dd", System.Globalization.DateTimeFormatInfo.InvariantInfo)
Catch p As FormatException
   Console.WriteLine("{0} is not in the correct format.", start_date.Text.ToString())
End Try

Dim url
url = "https://mysite.com/api/reporting.ns?" & "username=" & username.Text & "&password=" & password.Text & "&generate_report=SupportSession" & "&start_date=" & start_date.Text & "&duration=" & duration.Text & "&limit=all"
myXml.Document = getXML(url)
End sub

' Download report to excel csv routine
Public Sub download(Source As Object, e As EventArgs)
Try
Date.ParseExact(start_date.Text.ToString(), "yyyy-mm-dd",     System.Globalization.DateTimeFormatInfo.InvariantInfo)
Catch p As FormatException
   Console.WriteLine("{0} is not in the correct format.", start_date.Text.ToString())
End Try

Dim url
url = "https://mysite.com/api/reporting.ns?" & "username=" & username.Text & "&password=" & password.Text & "&generate_report=SupportSession" & "&start_date=" & start_date.Text & "&duration=" & duration.Text & "&limit=all"
csv.Document = dlXML(url)
End sub

' Reset form
Public Sub reset(Source As Object, e As EventArgs)
username.Text = ""
password.Text = ""
start_date.Text = ""
duration.Text = "0"
End sub

' Create Popup Calendar and associated Panel
Private Sub Calendar1_SelectionChanged(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Calendar1.SelectionChanged
Start_date.Text = Calendar1.SelectedDate
End Sub 

Public Sub panel(Source As Object, e As EventArgs)
panel1.Visible = Not panel1.Visible
If panel1.Visible = "True"
selDate.Text = "Close"
Else
selDate.Text = "Select Date"
End If
End Sub

' Show report on page routine
Function getXML(sourceFile As String) 
Dim myRequest As System.Net.WebRequest = System.Net.WebRequest.Create(sourceFile)
Dim myResponse As System.Net.WebResponse = myRequest.GetResponse()
Dim myReader As System.Xml.XmlTextReader = new System.Xml.XmlTextReader(myResponse.GetResponseStream())
Dim doc As System.Xml.XmlDocument = New System.Xml.XmlDocument()
doc.Load(myReader)

getXML = doc
End Function

' Download report to excel csv routine
Function dlXML(sourceFile As String)

Dim myRequest As System.Net.WebRequest = System.Net.WebRequest.Create(sourceFile)
Dim myResponse As System.Net.WebResponse = myRequest.GetResponse()
Dim myReader As System.Xml.XmlTextReader = new System.Xml.XmlTextReader(myResponse.GetResponseStream())
Dim doc As System.Xml.XmlDocument = New System.Xml.XmlDocument()

doc.Load(myReader)

Dim xslt As New System.Xml.Xsl.XslCompiledTransform() 'Pass in true to enable XSLT Debugging
xslt.Load(Server.MapPath("csv.xslt"))

xslt.Transform(new System.Xml.XmlNodeReader(doc), New System.Xml.XmlTextWriter(Response.Output)) 

Response.ContentType = "text/csv"
Response.AppendHeader("Content-Disposition", "attachment; filename=Report.csv")
Response.End()

End Function

</script>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<link rel="stylesheet" type="text/css" href="screen.css"/>
<title>MySite</title>
</head>

<body>

<div id="container" style="width: 86em;"> 
<div id="header" class="contentBox" style="padding-top: 5px; padding-bottom: 30px; border-bottom-width: 2px;">
<div ;="" style="margin: 0px 0pt; height: 100px;">
 <span style="height: 80px; float: left;">
  <a target="_blank" href="https://mysite.com">
<img alt="Logo" src="Logo.png" id="logo">
  </a>
 </span>
<div style="text-align: right; line-height: 1.5em; padding-top: 35px;" class="pageTitle">MySite</div>
</div>
</div>
<div id="sessionKeyBox" class="contentBox">
<h1 class="sectionTitle">Complete Form</h1>
<form id= "lc" method ="post" runat="server">
<div id="form">
<table>
<tr><td align="right"><asp:Label AssociatedControlId="start_date" Text="Start Date:" runat="server" /></td>
<td align="right"><asp:TextBox id="start_date" runat="server"/></td><td><asp:LinkButton id="selDate" onClick="panel" Text="Select Date" runat="server" /></td></tr>
<tr><td align="right"><asp:Label AssociatedControlId="duration" Text="Days:" runat="server" /></td>
<td align="right"><asp:TextBox id="duration" runat="server"/></td><td style="font-size:80%">Use 0 days for start day to present</td></tr>
<tr><td align="right"><asp:Label AssociatedControlId="username" Text="Username:" runat="server" /></td>
<td align="right"><asp:TextBox id="username" runat="server"/></td></tr>
<tr><td align="right"><asp:Label AssociatedControlId="password" Text="Password:" runat="server" /></td>
<td align="right"><asp:TextBox id="password" TextMode="password" runat="server"/></td></tr>
<tr><td /><td align="right"><asp:Button OnClick="show" Text="Show Report" runat="server" /> <asp:Button  Onclick="reset" Text="Reset" runat="server" /> </td></tr>
<tr><td></td><td align="right"><asp:Button OnClick="download" Text="Download Report" runat="server" /></td></tr>
</table>
<asp:Panel id="Panel1" runat="Server" CssClass="toggleCal" visible="false" HorizontalAlign="center">
<asp:Calendar ID="Calendar1" runat="server" /><asp:LinkButton onClick="panel" Text="Close" runat="server" />
</asp:Panel>
</div>
</div>
</div>
</form>

<asp:Xml id="myXml" transformsource="screen.xsl" runat="server" />
<asp:Xml id="csv" runat="server" />

</body>
</html>