2012-04-11 43 views
0

我试图复制一个XML到相同的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

什么处理器是你使用?我没有看到如何通过该XSLT添加ROOT。 – 2012-04-11 19:12:02

+0

请原谅我的无知,这是我第一次用XSLT说话,我怎么知道我正在使用哪个处理器? – user994258 2012-04-11 19:16:33

+0

您使用什么代码来调用XSLT? – 2012-04-11 19:29:20

回答

3

我最好的猜测是,您的电话代码自动包装你提供一个根节点的XML。

我的意思是你将它添加到您现有的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> 

我不看好,这将工作 - 这是一个猜测

+0

我相信你是对的。但是,您提供的XSLT复制了节点的值(而不是节点结构),并创建了无效的XML。有任何想法吗? – user994258 2012-04-12 12:55:26

+0

谢谢我会尝试。 – user994258 2012-04-12 20:19:03