使用 xslt 将 xml 转换为 json [英] xml to json using xslt

查看:39
本文介绍了使用 xslt 将 xml 转换为 json的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试通过在 C# 中使用以下代码应用 xslt 转换来将 XML 转换为 Json 转换.遇到以下错误,有人可以在下面建议我吗?代码:

 Li = p.GetRegisterEntry();var std = Li.Where(s => s.Id == id).FirstOrDefault();字符串 xml = std.contentxml.Value;doc.LoadXml(xml);字符串 XSLT = std.TemplateXSLT.Value;Xslt.LoadXml(XSLT);XslCompiledTransform xslt = new XslCompiledTransform();xslt.Load(Xslt.CreateNavigator());//转换我们的 Xml-ified JSONvar outputDocument = new XmlDocument();var stream = new MemoryStream();xslt.Transform(doc, null, stream);var sr = new StreamReader(stream);var myStr = sr.ReadToEnd();流.位置= 0;outputDocument.Load(stream);//转换回 JSON字符串 jsonText = JsonConvert.SerializeXmlNode(outputDocument);

在 outputDocument.Load(stream) 处收到以下错误;System.Xml.dll 中出现类型为System.Xml.XmlException"的异常,但未在用户代码中处理附加信息:有多个根元素.第 2 行,位置 2.

有人可以帮我破解这个吗?

这是我的 XML 和 XSTL 文件XML:

 <RegisterEntry type="CM2" desc="请求更改姓名、地址和/或新加坡地址,以便为代理人、申请人/所有者和/或其他相关方提供服务"><EventDate>23/09/2051</EventDate><数据项><LodgementDate>26/08/2022</LodgementDate><DecisionDate>21/12/2031</DecisionDate><详情><特别的><TransactionType>测试数据</TransactionType><详细信息>测试数据</详细信息></特别的></详情></数据项></RegisterEntry></新数据集>

XSLT:

<xsl:output method="html"/><xsl:template match="RegisterEntry"><p>测试数据方<xsl:value-of select="DataItems/TransactionType"/></p><div id="内容"><表格><tr><th valign="top" align="left">提交日期 </th><td><xsl:value-of select="DataItems/LodgementDate"/></td></tr><tr><th valign="top" align="left">决定日期 </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%">测试数据 <xsl:value-of select="TransactionType"/></th><td><xsl:value-of select="详细信息"/></td></tr></xsl:for-each>

</xsl:模板></xsl:stylesheet>

解决方案

正如 Tim 所指出的,问题在于您的 XSLT 没有创建可以使用 XmlDocument 加载的格式良好的 XML 文档但只是一个片段.因此,如果您需要带有结果的 XmlNode,您可以使用不同的方法,例如

XmlDocument resultDoc = new XmlDocument();XmlDocumentFragment resultFrag = resultDoc.CreateDocumentFragment();使用 (XmlWriter xw = resultFrag.CreateNavigator().AppendChild()){xslt.Transform(doc, null, xw);xw.Close();}字符串 jsonText = JsonConvert.SerializeXmlNode(resultFrag);

您的库 JsonConvert 是否能够处理我不知道的文档片段.

am trying to convert the XML to Json Conversion by applying the xslt transformation using following code in C#. Am getting following error can any one suggest me on below? Code:

 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);

am getting the following error at outputDocument.Load(stream); An exception of type 'System.Xml.XmlException' occurred in System.Xml.dll but was not handled in user code Additional information: There are multiple root elements. Line 2, position 2.

can any one please help me to crack this?

here are my XML and XSTL Files 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>

解决方案

As Tim has pointed out, the problem is that your XSLT does not create a well-formed XML document you could load with XmlDocument but only a fragment. So if you need an XmlNode with the result you can use a different approach with e.g.

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);

Whether your libray JsonConvert is able to handle a document fragment I don't know however.

这篇关于使用 xslt 将 xml 转换为 json的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆