C# 通过C使用XSLT将XML转换为XML#

C# 通过C使用XSLT将XML转换为XML#,c#,xml,xslt,C#,Xml,Xslt,我有一个XML文件(书),在创建输出XML文件之前需要对其进行更改 我有一个XSLT转换文件,它可以很好地完成部分工作,但我还需要更进一步,这是我正在努力的地方 在C#中,我使用XslCompiledTransform对象来触发转换任务,但这不起作用,因为XML文件输出为空 代码隐藏 XslCompiledTransform transform = new XslCompiledTransform(); transform.Load(Server.MapPath("~/RSS91.xslt"))

我有一个XML文件(书),在创建输出XML文件之前需要对其进行更改

我有一个XSLT转换文件,它可以很好地完成部分工作,但我还需要更进一步,这是我正在努力的地方

在C#中,我使用XslCompiledTransform对象来触发转换任务,但这不起作用,因为XML文件输出为空

代码隐藏

XslCompiledTransform transform = new XslCompiledTransform();
transform.Load(Server.MapPath("~/RSS91.xslt"));
transform.Transform(Server.MapPath("~/book.xml"), Server.MapPath("~/output.xml"));
RSS91.xslt

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="html" indent="yes"/>
  <xsl:param name="title"/>
  <xsl:template match="rss">
    <xsl:for-each select="channel/item">
      <br>
        <strong>
          <a href="{link}" target="_main">
            <xsl:value-of select="title"/>
          </a>
        </strong>
        <br></br>
        <xsl:value-of select="description" disable-output-escaping="yes"/>
      </br>
      <br></br>
      <xsl:value-of select="pubDate"/>
      <br></br>
    </xsl:for-each>
  </xsl:template>
  <xsl:template match="description">
    <br>
      <xsl:value-of select="."/>
    </br>
  </xsl:template>
</xsl:stylesheet>











book.xml

<?xml version="1.0" encoding="utf-8" ?>
<rss>
  <title></title>
</rss>

正如@HenkHoltermann所建议的那样,如果输入XML和应用的XSLT样式表是空的,那么输出XML文档是空的

XSLT样式表工作得很好——只是转换了与之无关的输入XML。让我解释一下原因

在样式表中,有两个模板与

  • rss
    元素
  • 说明
    元素
转换此输入XML时:

<?xml version="1.0" encoding="utf-8" ?>
<rss>
  <title></title>
</rss>
它什么也不做,因为在输入XML中,它里面既没有
频道
,也没有
元素。因此,会触发第一个模板,但不会整体输出任何内容

第二个模板根本不会被触发,输入XML中没有
description
元素

总之,XSLT样式表通常是针对特定类型的输入XML文档定制的。它要么依赖于输入XML中存在的特定结构,要么依赖于存在的特定值或其他内容。一个例外是身份转换,它可以应用于任何形式良好的XML



对不起,我还没弄明白我需要做什么

嗯,我有两条建议

  • 这准确地描述了您正在做的事情:

    想象一下你拥有一头牛。如果你完全简化了这个过程,奶牛就会把草变成牛奶。这很简单——你输入草,奶牛输出牛奶。这种方法之所以有效,是因为奶牛的消化系统“知道”如何把草变成牛奶。但它只准备咀嚼草。现在,你正在喂你的奶牛石头和旧轮胎。你为什么期望它快乐地生产牛奶
  • 自己学习XSLT。阅读一本书,学习例子,完成一个教程


转换是匹配的,然后选择每个通道/项目标记。没有,所以很明显输出中没有创建XML。很抱歉,我还没有弄清楚我需要做什么
<xsl:for-each select="channel/item">