XML StringWriter пустой - PullRequest
       20

XML StringWriter пустой

1 голос
/ 27 сентября 2011

У меня есть некоторый XML в XMLDocument, и я хочу поместить его в StringWriter, но он всегда становится пустым (?) Я пытался проверить переменные с помощью debug, но я все еще не знаю, что происходит.

Вот что у меня есть:

        XmlDocument xmlInput = new XmlDocument();
        /* after this executes, xmlInput has lots of data in it */  
        xmlInput.LoadXml(...); 

        XslCompiledTransform transform = new XslCompiledTransform();
        /* I'm pretty sure Template.xslt is being found and loaded correctly */
        transform.Load(Server.MapPath("/Files/Template.xslt")); 

        using (System.IO.StringWriter sb = new System.IO.StringWriter())
        {
            XmlWriterSettings xSettings = new XmlWriterSettings();
            xSettings.ConformanceLevel = ConformanceLevel.Fragment;
            xSettings.Encoding = Encoding.UTF8;
            /* PROBLEM: After this line, StringWriter sb is {} */
            using (XmlWriter xWriter = XmlWriter.Create(sb, xSettings))
            {
                transform.Transform(xmlInput, xWriter);
            }

            /* xmlText is empty string "" after this line */
            String xmlText = sb.ToString();

            /* ... does more stuff ... */
        }

Можно мне помочь? Я действительно не уверен, куда идти отсюда, чтобы заставить это работать.

РЕДАКТИРОВАТЬ: еще больше расследований:

        using (var stringWriter = new StringWriter())
        {
            using (var xmlTextWriter = XmlWriter.Create(stringWriter))
            {
                /* Prints lots of data to the screen */
                Response.Write(xmlInput.InnerXml);

                xmlInput.WriteTo(xmlTextWriter);
                /* Doesn't print anything to the screen */
                Response.Write(stringWriter.GetStringBuilder().ToString() );
            }
        }

НО, промывка делает свое дело

                xmlInput.WriteTo(xmlTextWriter);
                xmlTextWriter.Flush();
                /* prints lots of data */
                Response.Write( stringWriter.GetStringBuilder().ToString() );

1 Ответ

0 голосов
/ 28 сентября 2011

Оказывается, что файл XSLT, который я пытался применить, требовал обертывания XML в определенный элемент.

Но трюк flush() очень помог.

...