使用Powershell .Net方法将XML转换为HTML

乔索

我正在尝试使用Powershell .Net方法使用XSL文件转换XML文件这是我的代码,

#-- Create transformation --#
$xslt = New-Object System.Xml.Xsl.XslCompiledTransform

#-- Create a reader with DTDparsing set to parse --#
$xrs = New-Object System.Xml.XmlReaderSettings
$xrs.DtdProcessing = 'Parse'

#-- Load the XSL transform with the reader setting --#
$xr = [System.Xml.XmlReader]::Create("C:\Users\admin\Downloads\recoveryHistory_en.xsl", $xrs)
$xslt.Load($xr)

#-- Create a writer --#
$xws = New-Object System.Xml.XmlWriterSettings
$xw = [System.Xml.XmlWriter]::Create("C:\Users\admin\Downloads\Test RP_failover.html", $xslt.OutputSettings)

#-- Execute the transform and output the results to a file --#
$xslt.Transform("C:\Users\admin\Downloads\Test RP_failover.xml", $xw)
$xw.Close()

尽管$xslt.Transform()确实按预期创建了HTML文件,但它似乎完全为空。这是xsl文件中的xsl:outputxsl:choose元素。我的XML和XSL文件存储在上面的链接中。我想知道xsl:chooseXSL文件中元素是否像XSL一样导致输出HTML文件为空<xsl:when test="@outputType = 'csv'">

<xsl:output omit-xml-declaration="yes" indent="yes" encoding="utf-8" doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN"/>

<xsl:template match="RecoveryPlanStepReport">
<xsl:choose>
   <xsl:when test="@outputType = 'html'">
      <xsl:call-template name="PrintRecoveryPlanStepReportForHtml"/>
   </xsl:when>
   <xsl:when test="@outputType = 'csv'">
      <xsl:call-template name="PrintRecoveryPlanStepReportForCsv"/>
   </xsl:when>
</xsl:choose>
</xsl:template>

我可以设置要显式调用Transform属性中是否有值我正在尝试找出一种方法来强制XSL仅使用HTML。System.Xml.Xsl.XslCompiledTransform<xsl:when test="@outputType = 'html'">

$xslt = New-Object System.Xml.Xsl.XslCompiledTransform
$xslt.Transform.Value
OverloadDefinitions
-------------------
void Transform(System.Xml.XPath.IXPathNavigable input, System.Xml.XmlWriter results)
void Transform(System.Xml.XPath.IXPathNavigable input, System.Xml.Xsl.XsltArgumentList arguments, System.Xml.XmlWriter results)
void Transform(System.Xml.XPath.IXPathNavigable input, System.Xml.Xsl.XsltArgumentList arguments, System.IO.TextWriter results)
void Transform(System.Xml.XPath.IXPathNavigable input, System.Xml.Xsl.XsltArgumentList arguments, System.IO.Stream results)
void Transform(System.Xml.XmlReader input, System.Xml.XmlWriter results)
void Transform(System.Xml.XmlReader input, System.Xml.Xsl.XsltArgumentList arguments, System.Xml.XmlWriter results)
void Transform(System.Xml.XmlReader input, System.Xml.Xsl.XsltArgumentList arguments, System.IO.TextWriter results)
void Transform(System.Xml.XmlReader input, System.Xml.Xsl.XsltArgumentList arguments, System.IO.Stream results)
void Transform(string inputUri, System.Xml.XmlWriter results)
void Transform(string inputUri, System.Xml.Xsl.XsltArgumentList arguments, System.Xml.XmlWriter results)
void Transform(string inputUri, System.Xml.Xsl.XsltArgumentList arguments, System.IO.TextWriter results)
void Transform(string inputUri, System.Xml.Xsl.XsltArgumentList arguments, System.IO.Stream results)
void Transform(string inputUri, string resultsFile)
void Transform(System.Xml.XmlReader input, System.Xml.Xsl.XsltArgumentList arguments, System.Xml.XmlWriter results, System.Xml.XmlResolver documentResolver)
void Transform(System.Xml.XPath.IXPathNavigable input, System.Xml.Xsl.XsltArgumentList arguments, System.Xml.XmlWriter results, System.Xml.XmlResolver documentResolver)
乔索

这是我解决的方法,

从这里修改了XSL中的以下代码段

   <xsl:template match="RecoveryPlanResult">
     <xsl:choose>
       <xsl:when test="Results">  <!-- SRM 4.x identifying tag -->
         <xsl:choose>
           <xsl:when test="@outputType = 'html'">
             <xsl:call-template name="LegacyPrintHistoryReportForHtml"/>
           </xsl:when>
           <xsl:when test="@outputType = 'csv'">
             <xsl:call-template name="LegacyPrintHistoryReportForCsv"/>
           </xsl:when>
         </xsl:choose>
       </xsl:when>
       <xsl:otherwise>  <!-- SRM 5.x -->
         <xsl:choose>
           <xsl:when test="@outputType = 'html'">
             <xsl:call-template name="PrintHistoryReportForHtml"/>
           </xsl:when>
           <xsl:when test="@outputType = 'csv'">
             <xsl:call-template name="PrintHistoryReportForCsv"/>
           </xsl:when>
         </xsl:choose>
       </xsl:otherwise>
     </xsl:choose>
   </xsl:template>

对此

<xsl:template match="RecoveryPlanResult">
    <xsl:call-template name="PrintHistoryReportForHtml"/>
</xsl:template>

问题:尽管match元素元素中具有正确的模式,但xsl:template元素中的表达式xsl:when不正确

<xsl:when test="@outputType = 'html'">

XML格式

<?xml version="1.0" encoding="UTF-8"?>
<RecoveryPlanResult>
  <RecoveryPlan>
    <Name>Test RP</Name>
    <Description />
    <LocalVcAddress>LocalVC</LocalVcAddress>
    <LocalSiteName>LocalSite</LocalSiteName>
    <RemoteVcAddress>remote</RemoteVcAddress>
    <RemoteSiteName>remote</RemoteSiteName>
    <TimeZoneOffset>0</TimeZoneOffset>
  </RecoveryPlan>
</RecoveryPlanResult>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用Powershell .Net方法将XML转换为HTML-System.Xml.Xsl.XslLoadException:XSLT编译错误

来自分类Dev

使用Powershell将XML转换为JSON

来自分类Dev

使用Java将HTML转换为xml

来自分类Dev

使用xslt将xml转换为html

来自分类Dev

使用Jquery将XML转换为HTML

来自分类Dev

使用Jquery将XML转换为HTML

来自分类Dev

使用Powershell将XML转换为特定的JSON结构

来自分类Dev

如何使用PowerShell 2.0将XML转换为CSV?

来自分类Dev

使用VB.NET将Linq转换为XML

来自分类Dev

使用PHP将XML数据转换为HTML

来自分类Dev

使用xslt将html表转换为xml

来自分类Dev

使用xslt以表格格式将xml转换为html

来自分类Dev

如何使用Power Tool XML将Word转换为html

来自分类Dev

使用Java将多个xml文件转换为html文件

来自分类Dev

复杂使用xslt将html表转换为xml

来自分类Dev

使用XSL将XML列表转换为HTML表

来自分类Dev

如何使用xslt将xml转换为html表

来自分类Dev

使用 XSLT 2.0 将 HTML 转换为 XML

来自分类Dev

使用 XSLT 模板将 XML 转换为 HTML

来自分类Dev

使用 XSLT 模板将 XML 转换为 HTML

来自分类Dev

使用vb.net将itextsharp html转换为.pdf

来自分类Dev

使用Powershell将JSON转换为NDJSON

来自分类Dev

将内部xml转换为powershell

来自分类Dev

将内部xml转换为powershell

来自分类Dev

Powershell将流程列表转换为HTML

来自分类Dev

使用XSLT将XML转换为XML

来自分类Dev

VB.NET-使用Json.NET将Json转换为Xml

来自分类Dev

使用Powershell将具有名称空间的XML转换为CSV

来自分类Dev

使用XSLT转换将XML转换为JSON之后,有什么方法可以删除根节点