需求描述:
在客户端有一个DataSet中存储有两个DataTable,一个是新增的若干条记录,一个是修改的若干条记录,
欲将其形成XML字符,作为一个参数传入到服务器端数据库存储过程中的XML类型变量中,再由存储过程解析XML,批量执行增加、修改操作利用 dataSet.GetXml() 方法取出的XML字符串如下:
<Detail>
<ADD>
<ID>1</ID>
<Color>BLACK MULTI</Color>
<Size>36</Size>
<Barcode>883760523336</Barcode>
<InvoiceQty>1</InvoiceQty>
<Re />
</ADD>
<ADD>
<ID>2</ID>
<Color>BLACK MULTI</Color>
<Size>32</Size>
<Barcode>883760523337</Barcode>
<InvoiceQty>2</InvoiceQty>
<Re />
</ADD>
<UPDATE>
<ID>7</ID>
<Color>RED</Color>
<Size>31</Size>
<Barcode>883735523336</Barcode>
<InvoiceQty>1</InvoiceQty>
<Re>TEST</Re>
</UPDATE>
<UPDATE>
<ID>9</ID>
<Color>BLACK</Color>
<Size>32</Size>
<Barcode>883435523337</Barcode>
<InvoiceQty>3</InvoiceQty>
<Re />
</UPDATE>
</Detail>但由于记录行数庞大,此格式的XML字符字节数太大,网络传输缓慢,想优化下,转变为属性节点格式的XML
<Detail>
<ADD ID="1" Color="BLACK MULTI" Size="36" Barcode="883760523336" InvoiceQty="1" Re="" />
<ADD ID="2" .... />
.....
<UPDATE ID="7" .... />
<UPDATE ID="9" .... />
.....
</Detail>其中 <ADD>, <UPDATE> 的节点数不固定,另外它们的子节点数量和名称不希望写死,
最笨的方法是利用XMLDOC重建一个XML,利用循环遍历读取,写入....能不能利用XSLT映射转换的方法转换?这个XSLT如何写?StringWriter output = new StringWriter();
XslCompiledTransform transform = new XslCompiledTransform();
System.Xml.Xsl.XslTransform tt= new System.Xml.Xsl.XslTransform();
transform.Load(??);
transform.Transform(??, null, output);
string xmlstring = output.ToString();
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="text" omit-xml-declaration="yes"/>
<xsl:template match="/"><此处如何写??></xsl:template></xsl:stylesheet>
最后感谢各位大侠出手相助!!!
在客户端有一个DataSet中存储有两个DataTable,一个是新增的若干条记录,一个是修改的若干条记录,
欲将其形成XML字符,作为一个参数传入到服务器端数据库存储过程中的XML类型变量中,再由存储过程解析XML,批量执行增加、修改操作利用 dataSet.GetXml() 方法取出的XML字符串如下:
<Detail>
<ADD>
<ID>1</ID>
<Color>BLACK MULTI</Color>
<Size>36</Size>
<Barcode>883760523336</Barcode>
<InvoiceQty>1</InvoiceQty>
<Re />
</ADD>
<ADD>
<ID>2</ID>
<Color>BLACK MULTI</Color>
<Size>32</Size>
<Barcode>883760523337</Barcode>
<InvoiceQty>2</InvoiceQty>
<Re />
</ADD>
<UPDATE>
<ID>7</ID>
<Color>RED</Color>
<Size>31</Size>
<Barcode>883735523336</Barcode>
<InvoiceQty>1</InvoiceQty>
<Re>TEST</Re>
</UPDATE>
<UPDATE>
<ID>9</ID>
<Color>BLACK</Color>
<Size>32</Size>
<Barcode>883435523337</Barcode>
<InvoiceQty>3</InvoiceQty>
<Re />
</UPDATE>
</Detail>但由于记录行数庞大,此格式的XML字符字节数太大,网络传输缓慢,想优化下,转变为属性节点格式的XML
<Detail>
<ADD ID="1" Color="BLACK MULTI" Size="36" Barcode="883760523336" InvoiceQty="1" Re="" />
<ADD ID="2" .... />
.....
<UPDATE ID="7" .... />
<UPDATE ID="9" .... />
.....
</Detail>其中 <ADD>, <UPDATE> 的节点数不固定,另外它们的子节点数量和名称不希望写死,
最笨的方法是利用XMLDOC重建一个XML,利用循环遍历读取,写入....能不能利用XSLT映射转换的方法转换?这个XSLT如何写?StringWriter output = new StringWriter();
XslCompiledTransform transform = new XslCompiledTransform();
System.Xml.Xsl.XslTransform tt= new System.Xml.Xsl.XslTransform();
transform.Load(??);
transform.Transform(??, null, output);
string xmlstring = output.ToString();
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="text" omit-xml-declaration="yes"/>
<xsl:template match="/"><此处如何写??></xsl:template></xsl:stylesheet>
最后感谢各位大侠出手相助!!!
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货