Есть ли причина, по которой я не могу получить значения из следующих двух элементов? - PullRequest
1 голос
/ 27 октября 2011

У меня есть код, который отправляет запрос, и результаты в формате xml затем присваиваются строковой переменной «tmp». Затем я предоставляю эту переменную в качестве входного XML-данных для функции, которая использует отдельную таблицу стилей xslt для преобразования результатов XML вHTML.

XML:

<?xml version="1.0" encoding="ISO-8859-1" ?> 
<Results>
<Exchange>
<OLO>LSMIT</OLO>
<Name>Mitcham</Name>
</Exchange>
<Checks>
<Check id="adsl">
<Linecode>GGEZ</Linecode>
<Linespeed>2048</Linespeed>
<Matched>Address</Matched>
<Provider>BT ADSL</Provider>
<Type>BT xDSL</Type>
<Updated>2010-08-17</Updated>
</Check>
</Checks>
</Results>

Таблица стилей XSLT:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
<xsl:output method="html" indent="yes"/>

<xsl:template match="/">
<html>
<body>
<p>You are connected to the <b>
<xsl:for-each select="Results/Exchange">
<xsl:value-of select="Name"/>
</xsl:for-each>
</b> telephone exchange</p>
<br/>

<p>According to <b>
<xsl:for-each select="Results/Checks/Check">
<xsl:value-of select="Provider"/>
</xsl:for-each>
</b>, houses at your postcode should be able to suppor the following:</p>
<br/>

<table>
<tr>
<td>
<img src="/img/tick_BGAvailabilityChecker.png"></img>  
</td>
<td>
up to 
<xsl:for-each select="Results/Checks/Check">
<xsl:value-of select="Linespeed"/>
</xsl:for-each> 
</td>
</tr>
</body>
</html>
</xsl:template>

Невозможно отобразить значения следующих элементов:

<Linecode>
<Linespeed>
<Matched>

Однако я могу отображать следующие элементы просто отлично:

<Provider>
<Type>
<Updated>

Все вышеперечисленное является потомками элемента

Это странно, вопрос в том, почему я не могуЯ отображаю значения Linecode, Linespeed, Matched elemets?

Я потратил слишком много времени на это, не имея возможности выяснить, что отображают некоторые элементы, а другие нет.Будем очень благодарны за любые идеи,

Вот код, который я написал для отправки запроса и сохранения результатов XML в строковую переменную "tmp":

void cmdSubmit_Click(object sender, EventArgs e)
{
//Variable declarations
string user = "PRIVATE";
string pass = "PRIVATE";
string phone = TextBox1.Text;
string postcode = TextBox2.Text;
string buildnum = TextBox3.Text;
string check = "adsl";
string option = "adsllinecheck";
string outputformat = "xml";

string url = String.Format("http://api.samknows.com/checker.do?user={0}&pass={1}&phone=
{2}&postcode={3}&buildingnum={4}&checks={5}&options{6}&output{7}", user, pass, phone, 
postcode, buildnum, check, option, outputformat);
Uri uri = new Uri(url);

 string data = "field-keywords=ASP.NET 3.5";

 if (uri.Scheme == Uri.UriSchemeHttp)
 {
 HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(uri);
 request.Method = WebRequestMethods.Http.Post;
 request.ContentLength = data.Length;
 request.ContentType = "application/x-www-form-urlencoded";

 StreamWriter writer = new StreamWriter(request.GetRequestStream());
 writer.Write(data);
 writer.Close();
 HttpWebResponse response = (HttpWebResponse)request.GetResponse();

 StreamReader reader = new StreamReader(response.GetResponseStream());
 string tmp = reader.ReadToEnd();

После отладки он показывает, чтоэлементы не возвращаются.Однако, когда я просто копирую строку запроса в браузер, результаты в xml отображают соответствующие элементы.

Могу ли я что-то изменить в способе отправки запроса, чтобы гарантировать, что все элементы возвращены?

Спасибо

Ответы [ 2 ]

0 голосов
/ 28 октября 2011

Оказывается, в коде не было ничего плохого.После проверки строки запроса:

string url = String.Format("http://api.samknows.com/checker.do?user={0}&pass={1}&phone=
{2}&postcode={3}&buildingnum={4}&checks={5}&options{6}&output{7}"

я заметил, что оператор присваивания (=) отсутствовал в опциях и выходных параметрах.После добавления тех все работало отлично ....

Глупая ошибка, проблемы решены в конце!

Спасибо всем в любом случае за все его предложения.

0 голосов
/ 27 октября 2011

Чтобы ответить на ваш вопрос теоретически.Да, есть множество причин, и ваше преобразование xslt не является одним из них.Вывод вашего xslt, примененного к вашему xml, таков:

<html>
   <body>
      <p>
         You are connected to the <b>Mitcham</b> telephone exchange

      </p><br><p>
         According to <b>BT ADSL</b>, houses at your postcode should be able to suppor the following:

      </p><br><table>
         <tr>
            <td><img src="/img/tick_BGAvailabilityChecker.png"></td>
            <td>
               up to
               2048
            </td>
         </tr>
      </table>
   </body>
</html>

В отличие от ваших утверждений о невозможности отображения элемента LinespeedОшибка в какой-то другой части вашего кода, которую вы не показываете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...