Я предвосхищу это, заявив, что я - любитель ранга, когда дело касается веб-разработчика.
У меня есть веб-устройство, которое предоставляет данные 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">
Я не смог выполнить форматирование этого XML-ответа, чтобы он выглядел красиво.
Я создал XSLT, который прекрасно форматирует XML, и имеюиспользовал javascript для преобразования XML с использованием XSLT следующим образом:
function loadXMLDoc(dname)
{
if (window.XMLHttpRequest)
{
xhttp=new XMLHttpRequest();
}
else
{
xhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xhttp.open("GET",dname,false);
xhttp.send("");
return xhttp.responseXML;
}
function displayResult()
{
xml=loadXMLDoc("Report.xml");
xsl=loadXMLDoc("Report.xsl");
// code for IE
if (window.ActiveXObject)
{
ex=xml.transformNode(xsl);
document.getElementById("content").innerHTML=ex;
}
// code for Mozilla, Firefox, Opera, etc.
else if (document.implementation && document.implementation.createDocument)
{
xsltProcessor=new XSLTProcessor();
xsltProcessor.importStylesheet(xsl);
resultDocument = xsltProcessor.transformToFragment(xml,document);
document.getElementById("content").appendChild(resultDocument);
}
}
, который работает локально, но я столкнулся с проблемой междоменной безопасности, поскольку веб-устройство защищено, и я не могу разместить какой-либо код наit.
Я искал этот сайт и сеть в течение пары дней, пытаясь найти способ сделать это, используя другие средства [asp?], и в целом мне это не удалось.Основная причина в том, что я не знаю аспина, поэтому не знаю, как на него напасть.
Я думаю, что создание строки запроса в форме, затем загрузка полученного XML-ответа от веб-устройства в строку и применение 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>
И фрагмент 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&dl_action=chat&view=1&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&dl_action=chat&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>
Дополнительная информация:
В asp я нашел способ извлечь удаленный XML, который работает для URL-адресов, например http://example.com/file.xml
, но не работает для моего URL-адреса.Может потому что это запрос?Я искал способ кодировать / инкапсулировать свой URL, но не нашел ничего, что работает.
http://asp101.com/samples/xmlxsl_remote.asp
Любая помощь, которую вы можете предоставить, будет принята с благодарностью.
Спасибо!