开发者

How to make XMLTextWriter and XMLWriterSettings work together

I have this code for the settings:

Dim settings As XmlWriterSettings = New XmlWriterSettings()
            settings.Indent = True
            settings.OmitXmlDeclaration = True
            settings.NewLineOnAttributes = True

Then I have this code for the writer:

Dim xml As New XmlTextWriter(Server.MapPath("output.xml"), enc)

Please can you tell m开发者_Go百科e how I make the settings apply to the writer?

Thanks a lot, Phil.

EDIT: Code sample

Sub writexml_OnClick(ByVal sender As Object, ByVal e As EventArgs)
    Try
        'Vars
        Dim securityid As String = Input_securityid.Text
        Dim enc As Encoding 

        Dim settings As XmlWriterSettings = New XmlWriterSettings()
        settings.Indent = True
        settings.OmitXmlDeclaration = True
        settings.NewLineOnAttributes = True
        settings.Encoding = enc

        'Declare the writer and set file name / settings
        Dim xml As XmlWriter = XmlWriter.Create(Server.MapPath("output.xml"), settings)

        'start document
        xml.WriteStartDocument()
        xml.WriteComment("")

        'start envelope
        xml.WriteStartElement("soap", "Envelope", "http://schemas.xmlsoap.org/soap/envelope/")
        'start body
        xml.WriteStartElement("soap", "Body", Nothing)
        xml.WriteAttributeString("xmlns", "ns1", Nothing, "http://its/foo.wsdl")

        'start biographical capture
        xml.WriteStartElement("ns1:biographicalcaptureElement")

        'start securityid
        xml.WriteStartElement("ns1:securityid")
        xml.WriteValue(securityid)
        'end securityid 
        xml.WriteEndElement()

        'start requestdata 
        xml.WriteStartElement("ns1:requestdata")

        'end requestdata
        xml.WriteEndElement()
        'end biographical capture
        xml.WriteEndElement()

        'end body
        xml.WriteEndElement()
        'end envelope
        xml.WriteEndElement()
        'end document 
        xml.WriteEndDocument()

        'clean up
        xml.Flush()
        xml.Close()

    Catch ex As Exception
        errorlbl.Text = ex.ToString
    Finally
        errorlbl.Text = ("Created file ok")
    End Try


    End Sub

It does work fine if I use;

Dim xml As New XmlTextWriter(Server.MapPath("output.xml"), enc)

the xml is produced but settings are not applied.


This won't get you an XmlTextWriter, but to be honest I've always used XmlWriter when writing to a file anyway (XmlWriter is the base class of XmlTextWriter.)

You can use XmlWriter.Create(Server.MapPath("output.xml"), settings) which will give you an XmlWriter instead of an XmlTextWriter. Your encoding will then need to be set in your settings instance (settings.Encoding = enc.)

EDIT:

The sample code provided for me produces:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body xmlns:ns1="http://its/foo.wsdl" />
</soap:Envelope>

EDIT 2:

Your namespace is causing a problem because it's trying to put the element name as ns1:securityid when it should be the element name is securityid and the namespace ns1. You'll need to separate these like you've done in the WriteAttributeString call, like so:

instead of: xml.WriteStartElement("ns1:biographicalcaptureElement") use: xml.WriteStartElement("biographicalcaptureElement", "ns1")

With these changes in place I now get:

<!---->
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body xmlns:ns1="http://its/foo.wsdl">
    <biographicalcaptureElement xmlns="ns1">
      <securityid>TEST123</securityid>
      <requestdata />
    </biographicalcaptureElement>
  </soap:Body>
</soap:Envelope>


public partial class XMLWriter : System.Web.UI.Page
{
    static string strFileName=@"E:\vijay112.xml";
    static XmlTextWriter write = null;
    public static int i = 0;  

    //////       static string ProcessName=Process.GetCurrentProcess().ProcessName;
    //////static Process[] processes = Process.GetProcessesByName(ProcessName); 
    //////      if (    // {
    //////      // Application.ExitThread();
    //////      // }

    public XMLWriter()
    {

    }
    ~XMLWriter()
    {
        //write.Close(); ;
    }
    protected void Page_Load(object sender, EventArgs e)
    {
        try
        {
            if (!IsPostBack)
                write = new XmlTextWriter(strFileName, null);

            div_div.InnerText = i.ToString();
        }
        catch (Exception ex)
        {
        }
    }

    public static string XMLWrite()
    {
        try
        {           

            if (i == 0)
                return "success";
            else
            {
                return "please end the"+i+"more child";
            }
        }
        catch (Exception ex)
        {
            return ex.Message;
        }
        finally
        {
            try
            {

            }
            catch ( Exception ex){}
        }
    }

    public static void SetRootElement(string strRootElement)
    {
        write.WriteStartElement(strRootElement); 
    }
    //public static void SetAttributeString(string strRootElement)
    //{
       // write.WriteString();
    //}
    public static void SetChildElement(string strChildElement)
    {

        write.WriteStartElement(strChildElement);
    }
    public static void SetAttribute(string strAttribute, string strValue)
    {           
        write.WriteAttributeString(strAttribute, strValue);
    }
    public static void EndChildElement()
    {           
        write.WriteEndElement();

    }
    public static void EndRootElement()
    {            
        write.WriteFullEndElement();
    }

    protected void Bt_root_Click(object sender, EventArgs e)
    {
        SetRootElement(TB_key.Text);
    }
    protected void bt_child_Click(object sender, EventArgs e)
    {
        ++i;
        SetChildElement(TB_key.Text);

    }

    protected void BT_attribute_Click(object sender, EventArgs e)
    {
        SetAttribute(TB_key.Text, TB_value.Text);
    }

    protected void bt_endChild_Click(object sender, EventArgs e)
    {
                    --i; 
        EndChildElement();
    }

    protected void bt_endroot_Click(object sender, EventArgs e)
    {
        EndRootElement();
    }

    protected void bt_xml_Click(object sender, EventArgs e)
    {
        write.Close();
        XmlDocument xmldoc = new XmlDocument();
       xmldoc.Load(@"E:\vijay\SourceCodeBackEnd\PrimeroWebService\Images\vijay112.xml");
      //  write.Flush();
       Txml.Text= xmldoc.InnerXml;
    }

    protected void Txml_TextChanged(object sender, EventArgs e)
    {

    }
    protected void bt_close_Click(object sender, EventArgs e)
    {

    }

}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜