VB.Net 将 XSL 转换应用于 XML 文件 [英] VB.Net apply XSL transformation to XML file

查看:21
本文介绍了VB.Net 将 XSL 转换应用于 XML 文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一些由我的应用程序构建的 XML.这个 XML 被放到一个 XML 文件中,然后我希望应用一个 XSL 样式表,以便将它转换为一个 HTML 页面.然而,每次,它只是不断地输出原始 XML 而不是转换后的 HTML

I have got some XML which is built by my application. This XML is dropped to an XML file, which I then wish to apply an XSL stylesheet to in order to convert it to a HTML page. However, every time, it just keeps coming out with the original XML rather than the transformed HTML

这里是 XML:

<firelist>
  <visitor>
    <Title>Mr</Title>
    <Forename>Gregory</Forename>
    <Surname>House</Surname>
    <Visiting>asasasas</Visiting>
    <VisitTime>11:41</VisitTime>
    <PurposeOfVisit>asasasasa</PurposeOfVisit>
    <BadgeID>a</BadgeID>
    <Campus>KWA</Campus>
    <VisitingFrom>Princeton-Plainsboro Teaching Hospital</VisitingFrom>
    <ImagePath>\\more\DataCard\VisitorPhotos\V0004.jpg</ImagePath>
  </visitor>
</firelist>

这里是样式表:

<xsl:stylesheet version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>

    <xsl:template match="/">
        <html>
            <body>
                <xsl:for-each select="visitor">
                    <xsl:value-of select="title"/>
                </xsl:for-each>
            </body>
        </html>
    </xsl:template>

</xsl:stylesheet>

这是进行转换的代码:

Dim document As XmlDocument     ''# Xml document root
Dim navigator As XPathNavigator ''# navigate document
Dim transformer As XslTransform ''# transform document
Dim output As StringWriter

document = New XmlDocument()
document.Load("firelist.xml")

''# create navigator
navigator = document.CreateNavigator

''# load style sheet
transformer = New XslTransform()
transformer.Load("firelist.xslt")

''# transform XML data
output = New StringWriter()
transformer.Transform(navigator, Nothing, output)

''# display transformation in text box
Console.WriteLine(output.ToString)
''# write transformation result to disk
Dim stream As FileStream = New FileStream("firelist.html", FileMode.Create)

Dim writer As StreamWriter = New StreamWriter(stream)
writer.Write(output.ToString)

''# close streams
writer.Close()
output.Close()

我已经很久没有使用 XSL 和 .NET 做过任何事情了,所以我确定我可能遗漏了一些明显的东西!

It is ages since I did anything with XSL and .NET so I'm sure I am probably missing something obvious!

更新:以下是根据以下建议进行的修改后的当前代码...代码隐藏:

Dim document As XmlDocument     ' Xml document root
Dim navigator As XPathNavigator ' navigate document
Dim transformer As XslCompiledTransform ' transform document
Dim output As StringWriter

document = New XmlDocument()
document.Load("firelist.xml")

' create navigator
navigator = document.CreateNavigator

' load style sheet
transformer = New XslCompiledTransform()
transformer.Load("firelist.xslt")

' transform XML data
output = New StringWriter()
transformer.Transform(navigator, Nothing, output)

' display transformation in text box
Console.WriteLine(output.ToString)
' write transformation result to disk
Dim stream As FileStream = _
   New FileStream("firelist.html", FileMode.Create)

Dim writer As StreamWriter = New StreamWriter(stream)
writer.Write(output.ToString)

' close streams
writer.Close()
output.Close()

XML:

<?xml version="1.0" encoding="utf-8"?>
<firelist>
  <visitor>
    <Title>Dr</Title>
    <Forename>James</Forename>
    <Surname>Wilson</Surname>
    <Visiting>bob</Visiting>
    <VisitTime>11:30</VisitTime>
    <PurposeOfVisit>dunno</PurposeOfVisit>
    <BadgeID>4</BadgeID>
    <Campus>KWA</Campus>
    <VisitingFrom>Princeton-Plainsboro Teaching Hospital</VisitingFrom>
    <ImagePath>\\more\DataCard\VisitorPhotos\V0005.jpg</ImagePath>
  </visitor>
</firelist>

XSLT:

<?xml version="1.0"?>

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:template match="/firelist">
        <html>
            <body>
                <xsl:for-each select="visitor">
                    <xsl:value-of select="title"/>
                </xsl:for-each>
            </body>
        </html>
    </xsl:template>

</xsl:stylesheet>

我仍然只是将原始 XML 输出到我的 HTML 文件,而不是应该由 XML/XSLT 转换产生的 HTML.

I am still only getting the original XML being output to my HTML file, rather than the HTML which should result from the XML/XSLT Transformation.

推荐答案

循环中的 XPath 错误:

You've the wrong XPath in your loop:

<xsl:for-each select="firelist/visitor">
  <!-- ... --->
</xsl:for-each>

虽然为了提高可读性和更好地使用 XSLT 的功能,我建议使用专用模板而不是显式的 for-each 循环:

Though for increased readability and better use of XSLT's features I would recommend working with dedicated templates instead of explicit for-each loops:

<xsl:template match="/">
  <html>
    <body>
      <xsl:apply-templates select="firelist/visitor" />
    </body>
  </html>
</xsl:template>

<xsl:template match="visitor">
  <xsl:value-of select="title"/>
</xsl:template>

这篇关于VB.Net 将 XSL 转换应用于 XML 文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆