XmlTextWriterとXMLWriterSettingsが一緒に動作するようにする方法
質問
私は設定のためにこのコードを持っています:
Dim settings As XmlWriterSettings = New XmlWriterSettings()
settings.Indent = True
settings.OmitXmlDeclaration = True
settings.NewLineOnAttributes = True
そして、私は作家のためにこのコードを持っています:
Dim xml As New XmlTextWriter(Server.MapPath("output.xml"), enc)
私は設定がライターに適用させる方法を教えてくださいすることができます?
どうもありがとう、 フィルます。
編集:コードサンプル
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
私が使用している場合はそれがうまく動作しない。
Dim xml As New XmlTextWriter(Server.MapPath("output.xml"), enc)
XMLが生成されるが、設定が適用されていない。
解決
このは(XmlTextWriter
がXmlWriter
の基底クラスです。)あなたXmlWriter
を取得することはありませんが、とにかく、ファイルへの書き込み時に、私はいつもXmlTextWriter
を使用しました正直に言うと、
あなたはあなたの代わりにXmlWriter.Create(Server.MapPath("output.xml"), settings)
のXmlWriter
を与えるXmlTextWriter
を使用することができます。あなたのエンコーディングは、あなたの設定インスタンスに設定する必要があります(settings.Encoding = enc
。)
EDITます:
私のために提供されているサンプルコードは生成します:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body xmlns:ns1="http://its/foo.wsdl" />
</soap:Envelope>
EDIT 2:
それは要素名がns1:securityid
と名前空間securityid
であるべきであるとき、ns1
として要素名を入れしようとしているので、あなたの名前空間には、問題を引き起こしています。あなたがそうのように、WriteAttributeString
コールでやったように、これらを分離する必要があります:
の代わりに:xml.WriteStartElement("ns1:biographicalcaptureElement")
使用:xml.WriteStartElement("biographicalcaptureElement", "ns1")
私は今得る代わりにこれらの変更によります:
<!---->
<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)
{
}
}