XMLWriter 尝试使用重复属性

更新:解决问题的更新问题是元素而不是属性,并添加了我的 XML 输出


我必须向应用程序提供一些 XML 编码的字符串(我不经常使用标记语言,并且对它们的细微差别没有很多经验)。


我需要发送的格式如下(我无法控制):


<ROOT>

<Unit UnitName="Unit XYZ">

<Scheds Qty="5" ProdId="214" Comments="" />

<Scheds Qty="200" ProdId="125" Comments="Need by 1/23" />

<Scheds Qty="5000" ProdId="3100" Comments="" />

</Unit>

<Unit UnitName="Unit ABC">

<Scheds Qty="5" ProdId="214" Comments="" />

<Scheds Qty="200" ProdId="125" Comments="Need by 1/25" />

<Scheds Qty="5000" ProdId="3100" Comments="" />

</Unit>

</ROOT>

我试图用它来写这个,XML Writer但我遇到了属性Scheds重复的问题。


你可以在下面看到我在摆弄这个WriteString方法,但我相信我需要它作为一个属性。我的代码如下:


 //Top level root element

                writer.WriteStartElement("ROOT");


                //loop through list and determine the pu desc to create the xml element

                foreach (Tuple<int, List<PLYOrder>> t in allOrders)

                {

                    var unit = PUList.Where(x => x.PUId == t.Item1).First().PUDesc.ToString();


                    //Start each Unit as a new element

                    writer.WriteStartElement("Unit");

                    writer.WriteAttributeString("UnitName", unit);


                    foreach(PLYOrder p in t.Item2)

                    {                      

                        var qty = $"Qty=\"{p.Qty.ToString()}\"";

                        var prodId = $"ProdId=\"{p.Product.Id.ToString()}\"";

                        var Comments = $"Comments=\"{p.Comments}\"";


                    writer.WriteStartElement("Scheds", qty);

                    writer.WriteEndElement();


                    writer.WriteStartElement("Scheds", prodId);

                    writer.WriteEndElement();


                    writer.WriteStartElement("Scheds", comments);

                    writer.WriteEndElement();


                    }

                    writer.WriteEndElement();

                }

                writer.WriteEndElement();



Qyouu
浏览 77回答 2
2回答

斯蒂芬大帝

看起来您使用WriteStartElement不正确。第二个参数不是属性,而是命名空间 URI。这是一个简单的例子XmlWriterSettings settings = new XmlWriterSettings();settings.Indent = true;settings.OmitXmlDeclaration = true;XmlWriter writer = XmlWriter.Create(Console.Out, settings);writer.WriteStartElement("ROOT");writer.WriteStartElement("Unit");writer.WriteAttributeString("UnitName", "Unit XYZ");writer.WriteEndElement();writer.WriteStartElement("Scheds");writer.WriteAttributeString("Qty", "5");writer.WriteAttributeString("ProdId", "214");writer.WriteAttributeString("Comments", "Need by 1/25");writer.WriteEndElement();// Write the close tag for the root element.writer.WriteEndElement();writer.Close();&nbsp;这会产生以下输出:<ROOT>&nbsp; <Unit UnitName="Unit XYZ" />&nbsp; <Scheds Qty="5" ProdId="214" Comments="Need by 1/25" /></ROOT>因此,从您的示例来看,它将是:foreach(PLYOrder p in t.Item2){&nbsp;&nbsp; &nbsp; writer.WriteStartElement("Scheds");&nbsp; &nbsp; writer.WriteAttributeString("Qty", p.Qty.ToString());&nbsp; &nbsp; writer.WriteAttributeString("ProdId", p.Product.Id.ToString());&nbsp; &nbsp; writer.WriteAttributeString("Comments", p.Comments);&nbsp; &nbsp; writer.WriteEndElement();}

绝地无双

XML 中不能有重复的属性。您在示例输出中没有重复的属性,您有重复的元素,这是允许的。将元素的开头写在Scheds元素处理的开头和WriteEndElement()结尾,你应该没问题。
打开App,查看更多内容
随时随地看视频慕课网APP