XML в HTML в .net - PullRequest
       19

XML в HTML в .net

2 голосов
/ 24 февраля 2011
<?xml version="1.0" encoding="UTF-8"?>
<Advanced_IP_scanner>
    <row ip="10.10.1.4" status="1" name="remote003.domain.local" has_http="0" has_https="0" has_ftp="0" has_radmin_1="0" has_radmin_2="0" has_radmin_3="0" has_radmin_4="0">
        <share name="ADMIN$"/>
        <share name="C$"/>
        <share name="IPC$"/>
    </row>
    <row ip="10.10.1.12" status="1" name="remote005.domain.local" has_http="0" has_https="0" has_ftp="0" has_radmin_1="0" has_radmin_2="0" has_radmin_3="0" has_radmin_4="0">
        <share name="ADMIN$"/>
        <share name="C$"/>
        <share name="IPC$"/>
    </row>   
</Advanced_IP_scanner>

Как я могу преобразовать приведенный выше XML в простую таблицу HTML, чтобы перечислить все строки и заголовки строк, чтобы я мог их показать на своей веб-странице.

Ответы [ 2 ]

3 голосов
/ 24 февраля 2011

Вы должны использовать XSLT , он разработан специально для этой задачи.
Пример того, как ваш код может выглядеть следующим образом (благодаря этому ответу и эта страница ):

XPathDocument myXPathDoc = new XPathDocument(myXmlFile) ;
XslCompiledTransform myXslTrans = new XslCompiledTransform();
myXslTrans.Load(myStyleSheet);
XmlTextWriter myWriter = new XmlTextWriter("result.html",null);
myXslTrans.Transform(myXPathDoc,null,myWriter);

Надеюсь, это поможет.Если у вас есть дополнительные вопросы по XSLT, не стесняйтесь их задавать здесь.

1 голос
/ 25 февраля 2011

Вот пример того, как может выглядеть подходящая таблица стилей. Конечно, вам придется адаптировать его в зависимости от того, какой HTML-код вы на самом деле хотите создать.

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="Advanced_IP_Scanner">
    <html>
      <head>
        <title>Ip Scanner Table</title>
      </head>
      <body>
        <table>
          <thead>
            <tr>
              <th>...</th>
              <th>...</th>
              ...
            </tr>
          </thead>
          <tbody>
             <xsl:apply-templates/>
          </tbody>
        </table>
      </body>
    </html>
  </xsl:template>
  <xsl:template match="row">
    <tr>
      <td><xsl:value-of select="@ip"/></td>
      <td><xsl:value-of select="@name"/></td>
      <td><xsl:value-of select="@status"/></td>
      <td><xsl:value-of select="@has-http"/></td>
      ....
    </tr>
  </xsl:template>
</xsl:stylesheet>

Для .NET доступно несколько процессоров XSLT. Microsoft один поставляется в комплекте с .NET и поддерживает только XSLT 1.0 (что хорошо для такой простой задачи, как эта, но не работает на более сложных преобразованиях.) Есть два независимых процессора, которые поддерживают XSLT 2.0 - мой собственный продукт Saxon , который хорошо зарекомендовал себя и широко используется, и совсем недавно, XQSharp.

...