XML格式问题 [英] XML Formatting issue

查看:58
本文介绍了XML格式问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

大家好!

我一直在努力避免在这里发布此问题,因为我更愿意自行解决,但我很困惑.

我的程序中已经有一个将数据编译成XMLDocument的类,该类可以正常工作,没有任何问题,但是采用相同的代码并将其扩展为更复杂的xml模式,导致格式化问题比XML阅读器更为奇怪. 无法理解.

现在,我已经将此代码重写了4到5次,可以肯定是由于某种原因导致的,但是我似乎找不到它.以前有没有人处理过类似的事情?我在网上进行了一些搜索,发现几乎没有发现...

这些数据都是虚构的,因此我将其发布在下面.

这是我的ResultString(XML)返回的内容:

Hi everyone!

I've been trying to avoid posting this question on here as I prefer to figure it out on my own if at all possible, but I am just stumped.

I already have within my program a class that compiles data into an XMLDocument that works perfectly fine with no issue, however taking the same code and expanding it for a more complex xml schema has resulted in rather bizarre formatting issues that XML readers are unable to comprehend. 

I have rewritten this code 4 or 5 times now, certain that there was something that I was doing to cause this, but I can't seem to find it.  Has anyone dealt with anything like this before?  I did some searching online that found virtually nothing...

This data is all ficticious, so I'll just post it below.

This is what my ResultString (The XML) returns:

<?xml version=\"1.0\" encoding=\"utf-16\"?>\r\n<Data>\r\n  <Software>\r\n    <Application>ProjectDesk</Application>\r\n    <Version>1.0.10.5</Version>\r\n  </Software>\r\n  <Summary>\r\n    <CID>1</CID>\r\n    <JID>83</JID>\r\n    <CCompany />\r\n    <CFName />\r\n    <CLName />\r\n    <JobType>Radon</JobType>\r\n    <Total>$ 2,345.75</Total>\r\n    <Tax>$ 0.00</Tax>\r\n    <SubTotal>$ 2,345.75</SubTotal>\r\n    <ItemCount>8</ItemCount>\r\n    <DateCreated>2/21/2017 3:35:16 PM</DateCreated>\r\n    <CreatedBy>1</CreatedBy>\r\n    <DateUpdated>2/21/2017 3:35:14 PM</DateUpdated>\r\n    <UpdatedBy />\r\n  </Summary>\r\n  <Estimate>\r\n    <Title />\r\n    <Description />\r\n    <Rooms>\r\n      <Room>\r\n        <Floor />\r\n        <Room>Job</Room>\r\n        <WidthString>0' 0\"</WidthString>\r\n        <LengthString>0' 0\"</LengthString>\r\n        <HeightString>0' 0\"</HeightString>\r\n        <WidthInt>0</WidthInt>\r\n        <LengthInt>0</LengthInt>\r\n        <HeightInt>0</HeightInt>\r\n        <Offsets />\r\n        <Openings />\r\n        <Items>\r\n          <Item>\r\n            <ID>1</ID>\r\n            <Category>RDN</Category>\r\n            <Code>PBSC</Code>\r\n            <Type>Estimate</Type>\r\n            <Title>Test Title</Title>\r\n            <Description />\r\n            <PriceString>0.00</PriceString>\r\n            <Price>0.00</Price>\r\n            <Unit>JOB</Unit>\r\n            <Image />\r\n            <MinimumCharge>0.00</MinimumCharge>\r\n            <Materials />\r\n            <Tax>$ 0.00</Tax>\r\n            <Selected>True</Selected>\r\n            <TotalString>0.00</TotalString>\r\n            <Total>0.00</Total>\r\n            <TemplateType>Radon</TemplateType>\r\n            <TemplateStatus>Selected</TemplateStatus>\r\n          </Item>\r\n          <Item>\r\n            <ID>2</ID>\r\n            <Category>RDN</Category>\r\n            <Code>PELT</Code>\r\n            <Type>Estimate</Type>\r\n            <Title>Test Title</Title>\r\n            <Description />\r\n            <PriceString>0.00</PriceString>\r\n            <Price>0.00</Price>\r\n            <Unit>JOB</Unit>\r\n            <Image />\r\n            <MinimumCharge>0.00</MinimumCharge>\r\n            <Materials />\r\n            <Tax>$ 0.00</Tax>\r\n            <Selected>True</Selected>\r\n            <TotalString>0.00</TotalString>\r\n            <Total>0.00</Total>\r\n            <TemplateType>Radon</TemplateType>\r\n            <TemplateStatus>Selected</TemplateStatus>\r\n          </Item>\r\n          <Item>\r\n            <ID>3</ID>\r\n            <Category>RDN</Category>\r\n            <Code>FBSC</Code>\r\n            <Type>Estimate</Type>\r\n            <Title>Test Title</Title>\r\n            <Description />\r\n            <PriceString>0.00</PriceString>\r\n            <Price>0.00</Price>\r\n            <Unit>EA</Unit>\r\n            <Image />\r\n            <MinimumCharge>0.00</MinimumCharge>\r\n            <Materials />\r\n            <Tax>$ 0.00</Tax>\r\n            <Selected>True</Selected>\r\n            <TotalString>0.00</TotalString>\r\n            <Total>0.00</Total>\r\n            <TemplateType>Radon</TemplateType>\r\n            <TemplateStatus>Selected</TemplateStatus>\r\n          </Item>\r\n          <Item>\r\n            <ID>13</ID>\r\n            <Category>RDN</Category>\r\n            <Code />\r\n            <Type>Note</Type>\r\n            <Title>Note</Title>\r\n            <Description>Test Note</Description>\r\n            <PriceString>0.00</PriceString>\r\n            <Price>0</Price>\r\n            <Unit />\r\n            <Image />\r\n            <MinimumCharge>0.00</MinimumCharge>\r\n            <Materials />\r\n            <Tax>$ 0.00</Tax>\r\n            <Selected>True</Selected>\r\n            <TotalString>0</TotalString>\r\n            <Total>0</Total>\r\n            <TemplateType>Radon</TemplateType>\r\n            <TemplateStatus>Mandatory</TemplateStatus>\r\n          </Item>\r\n          <Item>\r\n            <ID>14</ID>\r\n            <Category>RDN</Category>\r\n            <Code />\r\n            <Type>Note</Type>\r\n            <Title>Note</Title>\r\n            <Description>Test Note</Description>\r\n            <PriceString>0.00</PriceString>\r\n            <Price>0</Price>\r\n            <Unit />\r\n            <Image />\r\n            <MinimumCharge>0.00</MinimumCharge>\r\n            <Materials />\r\n            <Tax>$ 0.00</Tax>\r\n            <Selected>True</Selected>\r\n            <TotalString>0</TotalString>\r\n            <Total>0</Total>\r\n            <TemplateType>Radon</TemplateType>\r\n            <TemplateStatus>Mandatory</TemplateStatus>\r\n          </Item>\r\n          <Item>\r\n            <ID>15</ID>\r\n            <Category>RDN</Category>\r\n            <Code />\r\n            <Type>Note</Type>\r\n            <Title>Note</Title>\r\n            <Description>Test Note</Description>\r\n            <PriceString>0.00</PriceString>\r\n            <Price>0</Price>\r\n            <Unit />\r\n            <Image />\r\n            <MinimumCharge>0.00</MinimumCharge>\r\n            <Materials />\r\n            <Tax>$ 0.00</Tax>\r\n            <Selected>True</Selected>\r\n            <TotalString>0</TotalString>\r\n            <Total>0</Total>\r\n            <TemplateType>Radon</TemplateType>\r\n            <TemplateStatus>Mandatory</TemplateStatus>\r\n          </Item>\r\n          <Item>\r\n            <ID>16</ID>\r\n            <Category>RDN</Category>\r\n            <Code />\r\n            <Type>Note</Type>\r\n            <Title>Note</Title>\r\n            <Description>Test Note</Description>\r\n            <PriceString>0.00</PriceString>\r\n            <Price>0</Price>\r\n            <Unit />\r\n            <Image />\r\n            <MinimumCharge>0.00</MinimumCharge>\r\n            <Materials />\r\n            <Tax>$ 0.00</Tax>\r\n            <Selected>True</Selected>\r\n            <TotalString>0</TotalString>\r\n            <Total>0</Total>\r\n            <TemplateType>Radon</TemplateType>\r\n            <TemplateStatus>Mandatory</TemplateStatus>\r\n          </Item>\r\n          <Item>\r\n            <ID>17</ID>\r\n            <Category>RDN</Category>\r\n            <Code />\r\n            <Type>Note</Type>\r\n            <Title>Note</Title>\r\n            <Description>Test Note</Description>\r\n            <PriceString>0.00</PriceString>\r\n            <Price>0</Price>\r\n            <Unit />\r\n            <Image />\r\n            <MinimumCharge>0.00</MinimumCharge>\r\n            <Materials />\r\n            <Tax>$ 0.00</Tax>\r\n            <Selected>True</Selected>\r\n            <TotalString>0</TotalString>\r\n            <Total>0</Total>\r\n            <TemplateType>Radon</TemplateType>\r\n            <TemplateStatus>Mandatory</TemplateStatus>\r\n          </Item>\r\n        </Items>\r\n      </Room>\r\n    </Rooms>\r\n  </Estimate>\r\n</Data>

格式不仅在整个过程中都包含\ r \ n,而且声明中还包含多个\字符...?

这是我的代码:

Not only does the formatting include \r\n throughout, but the declaration includes several \ characters...?

This is my code:

        public static string GenerateEstimate(DataTable _customer, DataTable _rooms, DataTable _offsets, DataTable _openings, DataTable _items, string _currentEstimate)
        {
            string ResultString = "";

            //Software
            string Application = "Demo";
            string ApplicatinVersion = CAssembly.AssemblyVersion.ToString();

            //Summary
            DataRow SummaryRow = _customer.Rows[0];
            string CID = SummaryRow["CID"].ToString();
            string JID = SummaryRow["JID"].ToString();
            string CCompany = SummaryRow["CCompany"].ToString();
            string CFName = SummaryRow["CFName"].ToString();
            string CLName = SummaryRow["CLName"].ToString();
            string JobType = SummaryRow["JobType"].ToString();
            string Total = SummaryRow["Total"].ToString();
            string Tax = SummaryRow["Tax"].ToString();
            string SubTotal = SummaryRow["SubTotal"].ToString();
            string ItemCount = SummaryRow["ItemCount"].ToString();
            string DateCreated = SummaryRow["DateCreated"].ToString();
            string CreatedBy = SummaryRow["CreatedBy"].ToString();
            string DateUpdated = SummaryRow["DateUpdated"].ToString();
            string UpdatedBy = SummaryRow["UpdatedBy"].ToString();

            //Estimate
            string EstimateTitleString = "";
            string EstimateDescriptionString = "";

            if (_currentEstimate == "")
            {
                try
                {
                    //Format xml file.
                    XmlWriterSettings settings = new XmlWriterSettings();
                    settings.Indent = true;
                    StringBuilder clearXml = new StringBuilder();
                    XmlWriter writer = XmlWriter.Create(clearXml, settings);

                    //Build body of xml file.
                    writer.WriteStartDocument();
                    writer.WriteStartElement("Data");

                    //Software
                    writer.WriteStartElement("Software");
                    writer.WriteElementString("Application", Application);
                    writer.WriteElementString("Version", ApplicatinVersion);
                    writer.WriteEndElement();

                    //Summary
                    writer.WriteStartElement("Summary");
                    writer.WriteElementString("CID", CID);
                    writer.WriteElementString("JID", JID);
                    writer.WriteElementString("CCompany", CCompany);
                    writer.WriteElementString("CFName", CFName);
                    writer.WriteElementString("CLName", CLName);
                    writer.WriteElementString("JobType", JobType);
                    writer.WriteElementString("Total", Total);
                    writer.WriteElementString("Tax", Tax);
                    writer.WriteElementString("SubTotal", SubTotal);
                    writer.WriteElementString("ItemCount", ItemCount);
                    writer.WriteElementString("DateCreated", DateCreated);
                    writer.WriteElementString("CreatedBy", CreatedBy);
                    writer.WriteElementString("DateUpdated", DateUpdated);
                    writer.WriteElementString("UpdatedBy", UpdatedBy);
                    writer.WriteEndElement();

                    //Estimate
                    writer.WriteStartElement("Estimate");
                    writer.WriteElementString("Title", EstimateTitleString);
                    writer.WriteElementString("Description", EstimateDescriptionString);

                    writer.WriteStartElement("Rooms");

                    foreach (DataRow room in _rooms.Rows)
                    {
                        string Floor = room["Floor"].ToString();
                        string Room = room["Room"].ToString();
                        string WidthString = room["Width"].ToString();
                        int Width = Convert.ToInt32(WidthString);
                        string LengthString = room["Length"].ToString();
                        int Length = Convert.ToInt32(LengthString);
                        string HeightString = room["Height"].ToString();
                        int Height = Convert.ToInt32(HeightString);

                        //Format Dimensions
                        WidthString = CMath.GetFormattedFeetAndInchesFromInches(Width);
                        LengthString = CMath.GetFormattedFeetAndInchesFromInches(Length);
                        HeightString = CMath.GetFormattedFeetAndInchesFromInches(Height);

                        //Rooms
                        writer.WriteStartElement("Room");
                        writer.WriteElementString("Floor", Floor);
                        writer.WriteElementString("Room", Room);
                        writer.WriteElementString("WidthString", WidthString);
                        writer.WriteElementString("LengthString", LengthString);
                        writer.WriteElementString("HeightString", HeightString);
                        writer.WriteElementString("WidthInt", Width.ToString());
                        writer.WriteElementString("LengthInt", Length.ToString());
                        writer.WriteElementString("HeightInt", Height.ToString());

                        //Offsets
                        writer.WriteStartElement("Offsets");
                        if (_offsets.Rows.Count > 0)
                        {
                            foreach (DataRow offset in _offsets.Rows)
                            {
                                if (offset["Room"].ToString() == Room)
                                {
                                    string Offset = offset["Offset"].ToString();
                                    string Type = offset["Type"].ToString();
                                    string OffsetRoom = offset["Room"].ToString();
                                    string OWidthString = offset["Width"].ToString();
                                    int OWidth = Convert.ToInt32(WidthString);
                                    string ODepthString = offset["Depth"].ToString();
                                    int ODepth = Convert.ToInt32(LengthString);
                                    string OHeightString = offset["Height"].ToString();
                                    int OHeight = Convert.ToInt32(HeightString);

                                    //Format Dimensions
                                    OWidthString = CMath.GetFormattedFeetAndInchesFromInches(OWidth);
                                    ODepthString = CMath.GetFormattedFeetAndInchesFromInches(ODepth);
                                    OHeightString = CMath.GetFormattedFeetAndInchesFromInches(OHeight);

                                    writer.WriteStartElement("Offset");
                                    writer.WriteElementString("Offset", Offset);
                                    writer.WriteElementString("Type", Type);
                                    writer.WriteElementString("OffsetRoom", OffsetRoom);
                                    writer.WriteElementString("WidthString", OWidthString);
                                    writer.WriteElementString("DepthString", ODepthString);
                                    writer.WriteElementString("HeightString", OHeightString);
                                    writer.WriteElementString("WidthInt", OWidth.ToString());
                                    writer.WriteElementString("DepthInt", ODepth.ToString());
                                    writer.WriteElementString("HeightInt", OHeight.ToString());
                                    writer.WriteEndElement();
                                }
                            }
                        }
                        writer.WriteEndElement();

                        //Openings
                        writer.WriteStartElement("Openings");
                        if (_openings.Rows.Count > 0)
                        {
                            foreach (DataRow opening in _openings.Rows)
                            {
                                if (opening["Room"].ToString() == Room)
                                {
                                    string Opening = opening["Opening"].ToString();
                                    string Type = opening["Type"].ToString();
                                    string OpeningRoom = opening["Room"].ToString();
                                    string ToOffset = opening["ToOffset"].ToString();
                                    string OWidthString = opening["Width"].ToString();
                                    int OWidth = Convert.ToInt32(WidthString);
                                    string OHeightString = opening["Height"].ToString();
                                    int OHeight = Convert.ToInt32(HeightString);

                                    //Format Dimensions
                                    OWidthString = CMath.GetFormattedFeetAndInchesFromInches(OWidth);
                                    OHeightString = CMath.GetFormattedFeetAndInchesFromInches(OHeight);

                                    writer.WriteStartElement("Opening");
                                    writer.WriteElementString("Opening", Opening);
                                    writer.WriteElementString("Type", Type);
                                    writer.WriteElementString("OffsetRoom", OpeningRoom);
                                    writer.WriteElementString("ToOffset", ToOffset);
                                    writer.WriteElementString("WidthString", OWidthString);
                                    writer.WriteElementString("HeightString", OHeightString);
                                    writer.WriteElementString("WidthInt", OWidth.ToString());
                                    writer.WriteElementString("HeightInt", OHeight.ToString());
                                    writer.WriteEndElement();
                                }
                            }
                        }
                        writer.WriteEndElement();

                        //Items
                        writer.WriteStartElement("Items");
                        if (_items.Rows.Count > 0)
                        {
                            foreach (DataRow item in _items.Rows)
                            {
                                string ItemRoom = item["Room"].ToString();

                                if (ItemRoom == Room)
                                {
                                    string ID = item["ID"].ToString();
                                    string Category = item["Category"].ToString();
                                    string Code = item["Code"].ToString();
                                    string Type = item["Type"].ToString();
                                    string Title = item["Title"].ToString();
                                    string Description = item["Description"].ToString();
                                    string PriceString = item["Price"].ToString();
                                    double Price = Convert.ToDouble(PriceString);
                                    string Unit = item["Unit"].ToString();
                                    string Image = item["Image"].ToString();
                                    string MinimumCharge = item["MinimumCharge"].ToString();
                                    string Materials = item["Materials"].ToString();
                                    string Taxable = item["Tax"].ToString();
                                    string Selected = item["Selected"].ToString();
                                    string LineTotalString = item["Total"].ToString();
                                    double LineTotal = Convert.ToDouble(LineTotalString);
                                    string TemplateType = item["TemplateType"].ToString();
                                    string TemplateStatus = item["TemplateStatus"].ToString();

                                    writer.WriteStartElement("Item");
                                    writer.WriteElementString("ID", ID);
                                    writer.WriteElementString("Category", Category);
                                    writer.WriteElementString("Code", Code);
                                    writer.WriteElementString("Type", Type);
                                    writer.WriteElementString("Title", Title);
                                    writer.WriteElementString("Description", Description);
                                    writer.WriteElementString("PriceString", PriceString);
                                    writer.WriteElementString("Price", Price.ToString());
                                    writer.WriteElementString("Unit", Unit);
                                    writer.WriteElementString("Image", Image);
                                    writer.WriteElementString("MinimumCharge", MinimumCharge);
                                    writer.WriteElementString("Materials", Materials);
                                    writer.WriteElementString("Tax", Tax);
                                    writer.WriteElementString("Selected", Selected);
                                    writer.WriteElementString("TotalString", LineTotalString);
                                    writer.WriteElementString("Total", LineTotal.ToString());
                                    writer.WriteElementString("TemplateType", TemplateType);
                                    writer.WriteElementString("TemplateStatus", TemplateStatus);
                                    writer.WriteEndElement();
                                }
                            }
                        }
                        //End Items
                        writer.WriteEndElement();

                        //End Room
                        writer.WriteEndElement();
                    }

                    //End Rooms
                    writer.WriteEndElement();

                    //End Estimate
                    writer.WriteEndElement();

                    //End Data
                    writer.WriteEndElement();

                    //End Document
                    writer.WriteEndDocument();
                    writer.Flush();
                    writer.Close();

                    //Create an XmlDocument object
                    XmlDocument xmlDoc = new XmlDocument();

                    //Load the XML file into the XmlDocument object
                    xmlDoc.PreserveWhitespace = true;
                    xmlDoc.LoadXml(clearXml.ToString());

                    ResultString = xmlDoc.InnerXml.ToString();
                }
                catch
                {

                }
            }
            else
            {

            }

            return ResultString;
        }


我真的很感谢任何人在这方面可以给我的帮助.我真的无法弄清楚问题是什么或什么原因造成的.

我在其他地方使用的相同(但更简单)的代码可以正常工作,没有任何问题...

非常感谢您的帮助.


I really appreciate any help anyone can give me on this.  I really cannot figure out what the issue is or what would be causing this.

The identical (But simpler) code that I use elsewhere works without any issue whatsoever...

Thank you very much for your help.

推荐答案

ResultString似乎没有任何问题.您可以通过在return语句之前插入以下行,在调试模式下运行代码并检查输出窗口来验证这一点

There does not seem to be anything wrong with the ResultString. You can verify this by inserting the following line just before the return statement, running the code in debug mode and checking the output window

System.Diagnostics.Trace.WriteLine(ResultString);

System.Diagnostics.Trace.WriteLine(ResultString);

您能否提供有关如何使用此方法返回的结果字符串的详细信息?

Can you provide details on how you are using the ResultString returned from this method?


这篇关于XML格式问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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