2012-04-11 35 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