使用Xslt复制XML文档而不对XML进行任何更改

时间:2012-04-11 19:06:46

标签: xml xslt

我正在尝试将XML复制到相同的XML

我正在使用以下XSLT:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
>
  <xsl:output indent="yes" method="xml"/>

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

如果输入XML是:

<CatalogRequest>
    <RequestFileHeader>
      <ClientCode>340000</ClientCode>
      <CreateTime>2012-04-11T14:57:03.357</CreateTime>
    </RequestFileHeader>
</CatalogRequest>

我得到以下结果:

<?xml version="1.0" encoding="Windows-1252"?>
<ROOT>
<CatalogRequest>
    <RequestFileHeader>
      <ClientCode>340000</ClientCode>
      <CreateTime>2012-04-11T14:57:03.357</CreateTime>
    </RequestFileHeader>
</CatalogRequest>
</ROOT>

如何在没有添加<ROOT>节点的情况下保留相同的XML。

这被称为如下:

Dim Xct As New XslCompiledTransform 
Xct.Load(New XmlTextReader(New StreamReader(xsltFileName))) 
Dim xal As New XsltArgumentList 
Dim helper As New XsltHelper 
xal.AddExtensionObject("urn:XsltHelper", helper) 
Dim memStream As New MemoryStream 
Dim streamWriter As New StreamWriter(memStream, Text.Encoding.GetEncoding(1252))
Xct.Transform(doc, xal, streamWriter)

1 个答案:

答案 0 :(得分:3)

我最好的猜测是,您的调用代码会自动将您提供的XML包装为ROOT节点。

我的意思是你要将它添加到现有的XSLT

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

给你这个:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" version="1.0" exclude-result-prefixes="msxsl">
   <xsl:output indent="yes" method="xml" />
   <xsl:template match="@*|node()">
      <xsl:copy>
         <xsl:apply-templates select="@*|node()" />
      </xsl:copy>
   </xsl:template>
   <xsl:template match="ROOT">
      <xsl:apply-templates select="@* | node()" />
   </xsl:template>
</xsl:stylesheet>

我不承诺这会起作用 - 这是猜测