1

这个转换的输出只包括文本,但我想要 HTML 和文本输出。我需要改变什么才能做到这一点?

我正在使用 VS 2010

当前示例输出:

琼斯马丁凯利马歇尔

注意我在 xsl 中也有这个,但它没有显示在我的代码示例中:

 xsl:output
    standalone="no"
    method="xml"
    indent="yes"
    omit-xml-declaration="no"
    version="1.0" 

xsl:

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

  <xsl:template match="/">

    <xsl:for-each select="/people">

      <div class="lastnames">
        <ul>
          <li>
            <xsl:value-of select="lastname" disable-output-escaping="yes" />
          </li>
        </ul>
      </div>

    </xsl:for-each>
  </xsl:template>

</xsl:stylesheet>

C#:

XslCompiledTransform xslt = new XslCompiledTransform();

xslt.Load(xslPath);

using (XmlWriter writer = XmlWriter.Create(outPath + 
                                          fileName + 
                                          "." +
                                            fileExt
                                         , xslt.OutputSettings))
{
    xslt.Transform(fileNode, null, writer);
    writer.Flush();
    writer.Close();
}
4

2 回答 2

1

如果没有看到输入数据,就很难确定出了什么问题。但首先我建议检查你的xsl:output元素;您说它存在于输入中“但未显示在 [the] 代码示例中”。这本身就让我怀疑。当您显示它时,它并没有显示为 XML 元素,这一事实让我倍加怀疑。

它们与您实际提出的问题无关,但在阅读您的代码时还有其他一些事情让我印象深刻:

  • xsl:output您展示的使用method="xml",但您没有生成 XHTML;你不使用有什么原因method="html"吗?
  • 为什么在显示人们的姓氏时禁用输出转义?您是否希望输入数据在人名中包含小于号?如果是这样,您是否要创建格式错误的输出而不是输出字符数据?
  • 您的xsl:for-each单个模板中的 没有做任何工作(如果根元素未命名,则使样式表静默完成而没有输出people)。如果您将模板替换为

    <xsl:template match="people">
      <div class="lastnames">
        <ul>
          <xsl:apply-templates/>
        </ul>
      </div>
    </xsl:template>
    <xsl:template match="lastname">
      <li>
        <xsl:apply-templates/>
      </li>
    </xsl:template>
  • 于 2012-08-19T17:52:47.030 回答
    1

    这个简单的转换

    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
     <xsl:output omit-xml-declaration="yes" indent="yes"/>
     <xsl:strip-space elements="*"/>
    
     <xsl:template match="people">
      <div class="lastnames">
       <ul>
         <xsl:apply-templates/>
       </ul>
      </div>
     </xsl:template>
    
     <xsl:template match="lastname">
      <li><xsl:apply-templates/></li>
     </xsl:template>
    </xsl:stylesheet>
    

    应用于此 XML 文档时(未提供!!!):

    <people>
     <lastname>Jones</lastname>
     <lastname>Martin</lastname>
     <lastname>Kelley</lastname>
     <lastname>Marshall</lastname>
    </people>
    

    产生想要的正确结果:

    <div class="lastnames">
      <ul>
        <li>Jones</li>
        <li>Martin</li>
        <li>Kelley</li>
        <li>Marshall</li>
      </ul>
    </div>
    

    它按预期由浏览器显示:

    • 琼斯
    • 马丁
    • 凯利
    • 马歇尔
    于 2012-08-19T18:26:57.227 回答