2017-06-27 17 views
1

C#の次のコードを使用してxslt変換を適用してXMLをJson変換に変換しようとしています。誰かが私の下に示唆することができます次のエラーを取得していますか? コード:outputDocument.Load(ストリーム)で次のエラーを取得xml to json xsltを使用して

Li = p.GetRegisterEntry(); 
     var std = Li.Where(s => s.Id == id).FirstOrDefault(); 
     string xml = std.contentxml.Value; 
     doc.LoadXml(xml);    
     string XSLT = std.TemplateXSLT.Value; 
     Xslt.LoadXml(XSLT);    
     XslCompiledTransform xslt = new XslCompiledTransform(); 
     xslt.Load(Xslt.CreateNavigator());   
     // Transform our Xml-ified JSON 
     var outputDocument = new XmlDocument(); 
     var stream = new MemoryStream(); 
     xslt.Transform(doc, null, stream); 
     var sr = new StreamReader(stream); 
     var myStr = sr.ReadToEnd(); 
     stream.Position = 0; 
     outputDocument.Load(stream); 
     // Convert back to JSON 
     string jsonText = JsonConvert.SerializeXmlNode(outputDocument); 

午前。 System.Xml.dllで 'System.Xml.XmlException'型の例外が発生しましたが、ユーザーコード で処理されませんでした。追加情報:複数のルート要素があります。 2行目、2番目の位置。

これを解消するのに手伝ってください。ここ

は私のXMLとXSTLファイルです XML:

<NewDataSet> 
     <RegisterEntry type="CM2" desc="Request to Change Name, Address and /or Singapore Address for Service for Agent, Applicant/Proprietor and/or other interested Parties"> 
     <EventDate>23/09/2051</EventDate> 
     <DataItems> 
      <LodgementDate>26/08/2022</LodgementDate> 
      <DecisionDate>21/12/2031</DecisionDate> 
      <Particulars> 
      <Particular> 
       <TransactionType>Test Data</TransactionType> 
       <Details>Test Data</Details> 
      </Particular> 
      </Particulars> 
     </DataItems> 
     </RegisterEntry> 
    </NewDataSet> 

XSLT:ティムが指摘したように

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
    <xsl:output method="html" /> 
    <xsl:template match="RegisterEntry"> 
    <p>  Test Data Parties<xsl:value-of select="DataItems/TransactionType" /></p> 
    <div id="content"> 
     <table> 
     <tr> 
      <th valign="top" align="left">   Lodgement Date   </th> 
      <td> 
      <xsl:value-of select="DataItems/LodgementDate" /> 
      </td> 
     </tr> 
     <tr> 
      <th valign="top" align="left">   Decision Date   </th> 
      <td> 
      <xsl:value-of select="DataItems/DecisionDate" /> 
      </td> 
     </tr> 
     <xsl:for-each select="DataItems/Particulars/Particular"> 
      <tr> 
      <th valign="top" align="left" style="width:50%"> Test Data <xsl:value-of select="TransactionType" /></th> 
      <td> 
       <xsl:value-of select="Details" /> 
      </td> 
      </tr> 
     </xsl:for-each> 
     </table> 
    </div> 
    </xsl:template> 
</xsl:stylesheet> 
+0

XMLドキュメントまたはXSLTドキュメントのいずれかが無効なXMLです。 – brijber

+2

あなたの質問を編集して、例外を生成するXMLおよびXSLTトランスフォームのサンプルを含めることができますか?[mcve]?コードを自分で実行できるのであれば、私たちが助けてくれる可能性が高くなります。しかし、エラー*複数のルート要素があります。 2行目、位置2。*は、XMLドキュメントの1つに複数の[ルート要素](https://en.wikipedia.org/wiki/Root_element)があることを示します。 XML文書には、正確に1つのルート要素が必要です。 – dbc

+0

@brijber私はそうではないと思うので、xmlは同じXSLTファイルを使ってHTMLに変換でき、htmlファイルは適切です。 – user3214322

答えて

2

、問題はあなたのXSLTが整形式XMLを作成していないということですXmlDocumentで読み込むことができますが、フラグメントのみです。したがって、XmlNodeが必要な場合は、たとえば次のような別のアプローチを使用できます。

XmlDocument resultDoc = new XmlDocument(); 
XmlDocumentFragment resultFrag = resultDoc.CreateDocumentFragment(); 

using (XmlWriter xw = resultFrag.CreateNavigator().AppendChild()) 
{ 
    xslt.Transform(doc, null, xw); 
    xw.Close(); 
} 

string jsonText = JsonConvert.SerializeXmlNode(resultFrag); 

あなたのライブラリのJsonConvertがドキュメントフラグメントを処理できるかどうかはわかりませんが、

+0

ありがとう@Honnenそれは私のために完全に働いた – user3214322

関連する問題