2011-06-02 42 views
0

我現在正在使用這個。我有一個必須使用xslt表單轉換的XML文檔。我的代碼如下:VB.NET中的XslCompiledTransform和xslt存在問題

 Dim xStream As New IO.MemoryStream 

     ' Create the XslCompiledTransform and load the stylesheet. 
     Dim xslt As New XslCompiledTransform() 
     xslt.Load(strLKxsl) 

     ' Create the XslCompiledTransform and load the stylesheet. 
     Dim xslt As New XslCompiledTransform() 
     xslt.Load(strXSLfolder & "xslt_lookup.xslt") 

     ' Create the XsltArgumentList. 
     Dim xslArg As New XsltArgumentList() 

     Using w As XmlWriter = XmlWriter.Create(xStream) 
      ' Transform the file. 
      xslt.Transform(xmldLookup, Nothing, w) 
     End Using 

我得到以下錯誤在xslt.Transform(xmldLookup,沒什麼,W)線:

令牌起始元素在狀態EndRootElement會導致一個無效的XML文件內。如果要編寫XML片段,請確保ConformanceLevel設置設置爲ConformanceLevel.Fragment或ConformanceLevel.Auto。

這是XML文件的內容:

<?xml version="1.0" encoding="utf-8"?> 
<?xml-stylesheet type="text/xsl" href="includes/xslt_lookup.xslt"?> 
<lookup xmlns="logis-online:lk" 
title="<Document Title>" 
nexturl="<URL>"> 

    <search visible="false"> 
    <field id="SUPPLIER_NO" hidden="true" size="10" 
    value="<Value>" /> 
    <field id="WEB_STORE_NO" hidden="true" size="10" 
    value="<Value>" /> 
    <field id="REST" hidden="true" size="40" value="" /> 
    <field id="LOOKUP_ACTION" hidden="true" size="1" value="<Value>" /> 
    <field id="WEB_ACTION" hidden="true" size="2" value="<Value>" /> 
    </search> 
    <results> 
    <header> 
     <section> 
     <item id="SUPPLIER_NO" title="Supplier No" value="<Value>" 
     HelpID="10" /> 
     <item id="SUPPLIER_NAME_SHORT" title="Supplier Name" 
     value="<Value>" HelpID="10" /> 
     <item id="LIABLE_STORE_NO" title="Liable Store No" 
     value="<Value>" HelpID="98" /> 
     </section> 
    </header> 
    <list target="<lookup aspx page>" /> 
    </results> 
</lookup> 
+0

我假設'title =「」'不是真的在你的XSLT中,你有'title =「ABC」' - 對嗎? – RonK 2011-06-02 12:17:45

+0

請向我們展示樣式表代碼,我們至少需要查看任何'xsl:output'指令。你需要一個純文本文件還是一個HTML文檔或一個XML文檔作爲轉換結果? – 2011-06-02 12:37:31

回答

1

的問題可能是由你的XSLT代碼導致產生一些輸出,是不是一個良好的XML文檔,但只是一個片段,可能有幾個頂級元素。這對XSLT來說是可能的,如果你只是寫一個文件或流,你不應該有任何問題。你的代碼,由於你沒有解釋的原因,通過MemoryStream構造一個XmlWriter,默認情況下,用XmlWriter.Create(stream)創建的任何XmlWriter都會檢查任何輸出是格式良好的XML文檔,如果不是,則會引發異常。 因此,爲了避免這個問題,你要麼根本就不創建的XmlWriter和簡單地做

xslt.Transform(xmldLookup, Nothing, xStream) 

或創建與XslCompiledTransform實例的OutputSettings例如一個的XmlWriter

Using xw As XmlWriter = XmlWriter.Create(xStream, xslt.OutputSettings) 
+0

THX很多鞅和dimitre。花了我很多時間來找到這篇文章和更多的時間來了解你的2,所以這裏是一個白癡證明解釋http://bresleveloper.blogspot.co.il/2013/07/how-to-use-xslcompiledtransform-xslt -in.html – bresleveloper 2013-07-23 08:59:41

0

此消息不言自明。這意味着XSLT轉換的結果不是格式良好的文檔,爲了強制XmlWriter編寫這樣的東西,其ConformanceLevel設置必須設置/指定爲ConformanceLevel.FragmentConformanceLevel.Auto。詳細瞭解「XmlWriter的數據一致性」here

如果XSLT轉換不是爲了生成XML文檔,最好不要指定用於生成結果的XmlWriter。更好的選擇是使用Transform() overload that accepts a TextWriter argument

否則,您可以直接寫入流(不指定任何XmlWriter)。

或者,create an XmlWriter使用適當XmlWriterSettings(指定ConformanceLevel.FragmentConformanceLevel.Auto)。

或者,如果XSLT轉換必須生成XML文檔 - 調試並修復它。