【发布时间】:2023-03-30 02:40:01
【问题描述】:
我正在尝试通过在 C# 中使用以下代码应用 xslt 转换来将 XML 转换为 Json 转换。出现以下错误有人可以在下面建议我吗? 代码:
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);
在 outputDocument.Load(stream); 处收到以下错误; 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>
【问题讨论】:
-
您的 XML 文档或 XSLT 文档是无效的 XML。
-
您能否edit 您的问题包括生成异常的 XML 和 XSLT 转换示例 - 即 minimal reproducible example?如果我们可以自己运行代码,我们就更有可能提供帮助。但是错误有多个根元素。第 2 行,位置 2。 表示您的一个 XML 文档有多个 root element。一个 XML 文档必须只有一个根元素。
-
@brijber 我认为不是这样,xml 可以使用相同的 XSLT 文件转换为 HTML,并且 html 文件是正确的。
-
@user3214322 - 几乎可以肯定您正在生成的输出文档没有单个根元素,但要确定您应该真正编辑您的问题以显示您的输入 XML 和您的 XSLT。谢谢。
-
@TimC 按要求添加了文件,请帮助我