2
<?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>

How can i convert above XML into simple HTML table to list all the rows and row headers so that I can show on my webpage.

SOF User
  • 7,590
  • 22
  • 75
  • 121

2 Answers2

4

You should use XSLT, it's designed specifically for this task.
An example of what your code might look like is as follows (thanks to this answer and this page):

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

Hope this helps. If you have further XSLT questions, don't hesitate to ask here.

Community
  • 1
  • 1
Donut
  • 110,061
  • 20
  • 134
  • 146
1

Here's an example of what a suitable stylesheet might look like. You'll have to adapt it of course depending on the HTML you actually want to produce.

<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>

There are several XSLT processors available for .NET. The Microsoft one comes bundled with .NET, and only supports XSLT 1.0 (which is fine for a simple task like this, but runs out of steam on more complex transformations.) There are two independent processor that support XSLT 2.0 - my own Saxon product, which is well established and widely used, and a more recent arrival, XQSharp.

Michael Kay
  • 156,231
  • 11
  • 92
  • 164