当前位置: 首页 > 知识库问答 >
问题:

如何在XSLT中合并两个XML文件,并使用c#中的编译转换生成一个HTML输出?

经清野
2023-03-14

我有两个XML文件,看起来像:

...........
XML File 1:
...........
<Result>
  <Id>111</Id> 
  <Title>Result 111 title</Title>
  <Description>Result 111 Description</Description>
</Result>

...........
XML File 2:
...........

<Result>
  <Id>222</Id> 
  <Title>Result 222 title</Title>
  <Description>Result 222 Description</Description>
</Result>

我有XSLT可以生成这样的设计:

|ID |
|Title :| |Result 111 Title|
|Description:| |Result 111 Description|     

我想要的是我还想从第2个XML文件中添加元素值,以便设计如下所示:

|ID |
|Title :| |Result 111 Title|
|Description:| |Result 111 Description|

|ID |
|Title :| |Result 222 Title|
|Description:| |Result 222 Description|    

此设计将在C#的运行时生成。到目前为止,我已经将一个XML应用于一个XSLT。但这是不同的。我如何才能实现这一点。请将“||”视为“”标签的设计。任何帮助都非常感谢。谢谢...!:)

共有1个答案

习阳
2023-03-14

诸如此类(受此答案启发):

var xslt = new XslCompiledTransform();
xslt.Load("merge.xslt", new XsltSettings{EnableDocumentFunction = true}, null );

var xmlr = XmlReader.Create("first.xml");
var xmlw = XmlWriter.Create("result.html");
var xslargs = new XsltArgumentList();
xslargs.AddParam("fileName", "", "second.xml");
xslt.Transform(xmlr, xslargs , xmlw);, xmlw);

以及xslt:

  <xsl:output method="html" indent="yes"/>

  <xsl:param name="fileName" select="'somefile'" />
  <xsl:param name="updates" select="document($fileName)" />

  <xsl:variable name="updateItems" select="$updates/*" />

  <xsl:template match="@* | node()">
        <xsl:copy>
            <xsl:apply-templates select="@* | node()"/>
        </xsl:copy>
    </xsl:template>

  <xsl:template match="/">
    <merge>
    <xsl:copy>
      <xsl:apply-templates select="*" />
      <xsl:apply-templates select="$updateItems" />
    </xsl:copy>
    </merge>
  </xsl:template>

再想一想,这可以更容易地实现,您可以添加任意数量的要合并的文件。

密码

var xslt = new XslCompiledTransform();
xslt.Load("merge.xslt", new XsltSettings{EnableDocumentFunction = true}, null );

using (var xmlr = XmlReader.Create(
    new StringReader(@"<files><file>first.xml</file><file>second.xml</file></files>")))
{
    using (var xmlw = XmlWriter.Create("result.html"))
    { 
        xslt.Transform(xmlr, null , xmlw);
    }
}

Xslt

<xsl:template match="/">
    <html>
      <body>
        <xsl:for-each select="/files/file">
          <xsl:apply-templates select="document(.)/*" />
        </xsl:for-each>
      </body>
    </html>
  </xsl:template>

参考:
加载
变换

 类似资料:
  • 我已经看到了如何用xslt合并两个xml文件或如何-can-I-merge-this-two-xml-files-using-xslt下的各种问题,但这些示例不处理文本输出,也不处理对“default”的静态引用。xml'。 我正在尝试生成一个由默认值生成的C headerfile。被目标修改的xml。xml。 我正在使用xsltproc作为xslt处理器,并希望能够执行xslproc merg。

  • 我有两个xml文件,需要使用XSLT将它们合并为一个。 第一个XML是(原始的): 第二个XML(更新数据)如下所示: 所需的合并结果-使用第二个XML更新第一个: 我已经搜索了stackoverflow,但仍然找不到答案。谢谢你的帮助。

  • 我有两个xml文件,需要将它们合并为一个xml。以下是示例: orginal.xml文件: 使现代化xml文件: 它们应合并为如下xml文件: 实际上,我想使用更新。xml来更新原始。xml: > update.xml中的新员工应该被添加到original.xml 在更新中修改了员工信息。xml应覆盖相应的员工节点。 我对XSLT略知一二,但我的知识还不足以找出适合合并的XSLT。

  • 问题内容: 我正在尝试编写一种简单的算法来读取两个XML文件,它们的节点和结构完全相同,但子节点内部的数据不一定相同,顺序也不相同。我该如何使用Microsoft的XML Diff .DLL创建一个简单的实现来创建第三个临时XML(即两个第一个XML之间的差异)? MSDN上的XML Diff: XML差异和补丁工具 XML Diff和Patch GUI工具 要比较的两个不同XML文件的样本XML

  • 我正在尝试通过字符串将根数据合并为一个,但无法这样做。请帮助。

  • 我在同一个文件夹中有两个文件:chapter1。Rmd和第2章。Rmd,包括以下内容: 第一章Rmd 第2章Rmd 如何将它们组合成一个pdf输出? 当然,渲染(input=“chapter1.Rmd”,output\u format=“pdf\u document”)可以完美地工作,但渲染(input=“chapter1.Rmd”,input=“chapter2.Rmd”,output\u fo