Как я могу использовать XSLT для преобразования XML в HTML в C #? - PullRequest
2 голосов
/ 19 октября 2011

Сначала я застрял в создании простого xslt. Таблица стилей, используемая для преобразования объекта xml. Во-вторых, я застрял на самом деле, используя таблицу стилей xslt для преобразования.

Фон выглядит следующим образом:

У меня есть веб-часть, которая представляет собой небольшую форму с тремя входами. Эти входные данные затем отправляются и используются для запроса внешнего API по запросу GET Http. Результаты запроса затем отображаются на отдельной странице в формате XML. Теперь мне нужно преобразовать xml в html и вывести его вместо XML.

Что у меня сейчас есть:

У меня есть строковая переменная "tmp", которая содержит результаты запроса API по запросу http get. Результаты запроса сохраняются в переменной, и я могу отобразить результаты, используя: (Данный код представляет собой небольшие фрагменты всего кода, которые наиболее актуальны для данного конкретного случая)

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

Response.Write(tmp);
Response.End();

Затем я использую «tmp» в качестве объекта документа XML, например:

XmlDocument doc = new XmlDocument();
doc.Load(tmp);

Затем в свой проект я добавил файл xslt, который будет использоваться для преобразования.

Вот где я застрял:

  1. Я создал объект документа XML, как указано выше. Как мне затем перейти к использованию XSLT-файла, добавленного в мой проект, для преобразования?

  2. Как на самом деле добиться преобразования, чтобы преобразовать вывод в HTML.

Я боролся с этим большую часть недели.

Ответы [ 2 ]

4 голосов
/ 19 октября 2011

Вот простой пример того, как использовать XSLT для преобразования XML в HTML:

string tmp = "<XML DATA>";
StringBuilder sbXslOutput = new StringBuilder();   

using (XmlWriter xslWriter = XmlWriter.Create(sbXslOutput))  
{  
    XslCompiledTransform transformer = new XslCompiledTransform();  
    transformer.Load("transformer.xsl");  
    XsltArgumentList args = new XsltArgumentList();  

    XmlDataDocument doc = new XmlDataDocument();
    doc.Loadxml(tmp);

    transformer.Transform(doc, args, xslWriter);  
}  

string dataSetHtml = sbXslOutput.ToString();  

Допустим, это ваш XML:

<RecentMatter>   
  <UserLogin>PSLTP6\RJK</UserLogin>   
  <MatterNumber>99999-2302</MatterNumber>   
  <ClientName>Test Matters</ClientName>   
  <MatterName>DP Test Matter</MatterName>   
  <ClientCode>99999</ClientCode>   
  <OfficeCode/>   
  <OfficeName/>   
  <Billable>true</Billable>   
  <ReferenceId/>   
  <LastUsed>2011-08-23T23:40:24.13+01:00</LastUsed>   
</RecentMatter>   
<RecentMatter>   
  <UserLogin>PSLTP6\RJK</UserLogin>   
  <MatterNumber>999991.0002</MatterNumber>   
  <ClientName>Lathe 1</ClientName>   
  <MatterName>LW Test 2</MatterName>   
  <ClientCode/>   
  <OfficeCode/>   
  <OfficeName/>   
  <Billable>true</Billable>   
  <ReferenceId/>   
  <LastUsed>2011-07-12T16:57:27.173+01:00</LastUsed>   
</RecentMatter>   
<RecentMatter>   
  <UserLogin>PSLTP6\RJK</UserLogin>   
  <MatterNumber>999991-0001</MatterNumber>   
  <ClientName>Lathe 1</ClientName>   
  <MatterName>LW Test 1</MatterName>   
  <ClientCode/>   
  <OfficeCode/>   
  <OfficeName/>   
  <Billable>false</Billable>   
  <ReferenceId/>   
  <LastUsed>2011-07-12T01:59:06.887+01:00</LastUsed>   
</RecentMatter>   
</NewDataSet>   

Вот скрипт XSLT, который преобразует XML в HTML:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">  
  <xsl:template match="/">  
      <table border="1">  
        <tr>  
          <th>User Login</th>  
          <th>Matter Number</th>  
          ...  
        </tr>  
        <xsl:for-each select="NewDataSet/RecentMatter">  
          <tr>  
            <td>  
              <xsl:value-of select="UserLogin"/>  
            </td>  
            <td>  
              <xsl:value-of select="MatterNumber"/>  
            </td>  
            ...  
          </tr>  
        </xsl:for-each>  
      </table>  
  </xsl:template>  
</xsl:stylesheet> 
1 голос
/ 19 октября 2011

Вы можете записать в поток памяти:

MemoryStream mStream = new MemoryStream();
mXslt.Transform(new XPathDocument(new XmlNodeReader(mXml)), null, mStream );
mStream.Position = 0;
StreamReader mReader = new StreamReader(mStream);
string mOutput = mReader.ReadToEnd();

Использовать XPathDocument и XslCompiledTransform .Они намного быстрее, чем XslTransform и XmlDocument .Даже если вы используете XmlDocument для создания xml, преобразуйте его в XPathDocument для преобразования.

См. Это также для получения дополнительной информации: Простейший способ преобразования XML в HTML с XSLT в C #?*

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