C# 使用xslt将xml转换为json
我试图通过使用C#中的以下代码应用xslt转换来将XML转换为Json。我有以下错误,有人能在下面建议我吗? 代码: 我在outputDocument.Load(stream)处遇到以下错误; System.Xml.dll中发生“System.Xml.XmlException”类型的异常,但未在用户代码中处理 附加信息:有多个根元素。第2行,位置2 谁能帮我破解这个吗 下面是我的XML和XSTL文件 XML:C# 使用xslt将xml转换为json,c#,json,xml,xslt,C#,Json,Xml,Xslt,我试图通过使用C#中的以下代码应用xslt转换来将XML转换为Json。我有以下错误,有人能在下面建议我吗? 代码: 我在outputDocument.Load(stream)处遇到以下错误; System.Xml.dll中发生“System.Xml.XmlException”类型的异常,但未在用户代码中处理 附加信息:有多个根元素。第2行,位置2 谁能帮我破解这个吗 下面是我的XML和XSTL文件 XML: 23/09/2051 26/08/2022 21/12/2031 测试数据 测试数据
23/09/2051
26/08/2022
21/12/2031
测试数据
测试数据
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>
测试数据方
提交日期
决定日期
测试数据
正如Tim所指出的,问题在于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);
但是,我不知道您的Library JsonConvert是否能够处理文档片段。您的XML文档或XSLT文档都是无效的XML。您能否提出一个问题,以包含生成异常的XML和XSLT转换的示例,即a?如果我们能自己运行代码,我们就更有可能提供帮助。但错误在于存在多个根元素。第2行,位置2。指示一个XML文档具有多个。一个XML文档必须只有一个根元素。@brijber我认为这不是因为XML可以使用相同的XSLT文件转换为HTML,并且HTML文件是正确的。@user3214322-几乎可以肯定,您生成的输出文档没有一个根元素,但要确定这一点,您应该真正编辑您的问题,以显示您的输入XML和XSLT。谢谢。@TimC按要求添加了文件,请帮助我
<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>
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);