我在C#中看到这两个类:XmlTextWriter和XmlWriter.任何人都可以解释差异并告诉我在哪里使用哪个?
您好我正在尝试将一些XML数据插入到SQL Server 2008上的表中.但是我不断抛出此错误;
XML解析:第1行,第39个字符,无法切换编码
数据库列filemeta使用XML数据类型,我将编码切换为UTF-16,我认为这是添加XML数据所必需的.
INSERT INTO testfiles
(filename, filemeta)
VALUES
('test.mp3', '<?xml version="1.0" encoding="utf-16" standalone="yes"?><!--This is a test XML file--><filemeta filetype="Audio"><Comments /><AlbumTitle /><TrackNumber /><ArtistName /><Year /><Genre /><TrackTitle /></filemeta>');
Run Code Online (Sandbox Code Playgroud)
救命,我被困住了.
注意:我使用XMLTextWriter创建了XML.
目的:我计划使用XmlTextWriter创建XML文件,并使用XmlNode SelectSingleNode(),node.ChildNode [?]修改/更新一些现有内容.InnerText = someting等.
用XmlTextWriter创建XML文件后,如下所示.
XmlTextWriter textWriter = new XmlTextWriter("D:\\learning\\cs\\myTest.xml", System.Text.Encoding.UTF8);
Run Code Online (Sandbox Code Playgroud)
我练习下面的代码.但未能保存我的XML文件.
XmlDocument doc = new XmlDocument();
doc.Load("D:\\learning\\cs\\myTest.xml");
XmlNode root = doc.DocumentElement;
XmlNode myNode;
myNode= root.SelectSingleNode("descendant::books");
Run Code Online (Sandbox Code Playgroud)
....
textWriter.Close();
doc.Save("D:\\learning\\cs\\myTest.xml");
Run Code Online (Sandbox Code Playgroud)
我发现按照我的方式生产是不好的.有什么建议吗?我不清楚同一个项目中XmlTextWriter和XmlNode的概念和用法.感谢您阅读和回复.
我有一些代码,它将一个对象序列化为一个文件.我正在尝试将每个XML属性输出到单独的行.代码如下所示:
public static void ToXMLFile(Object obj, string filePath)
{
XmlSerializer serializer = new XmlSerializer(obj.GetType());
XmlWriterSettings settings = new XmlWriterSettings();
settings.NewLineOnAttributes = true;
XmlTextWriter writer = new XmlTextWriter(filePath, Encoding.UTF8);
writer.Settings = settings; // Fails here. Property is read only.
using (Stream baseStream = writer.BaseStream)
{
serializer.Serialize(writer, obj);
}
}
Run Code Online (Sandbox Code Playgroud)
唯一的问题是,对象的Settings属性XmlTextWriter是只读的.
如何Settings在XmlTextWriter对象上设置属性,以便NewLineOnAttributes设置有效?
嗯,我以为我需要一个XmlTextWriter,因为XmlWriter是一个abstract班级.如果你问我,有点困惑. 最终的工作代码在这里:
/// <summary>
/// Serializes an object to an XML file; writes each …Run Code Online (Sandbox Code Playgroud) .NET XmlTextWriter会创建无效的xml文件.
在XML中,允许一些控制字符,例如'horizontal tab'(	),但其他控件字符不像'vertical tab'().(见规格)
我有一个字符串,其中包含XML中不允许的UTF-8控制字符.
虽然XmlTextWriter逃避了角色,但最终的XML仍然是无效的.
如何确保XmlTextWriter永远不会生成非法的XML文件?
或者,如果无法执行此操作XmlTextWriter,如何从字符串中删除XML中不允许的特定控制字符?
示例代码:
using (XmlTextWriter writer =
new XmlTextWriter("test.xml", Encoding.UTF8))
{
writer.WriteStartDocument();
writer.WriteStartElement("Test");
writer.WriteValue("hello \xb world");
writer.WriteEndElement();
writer.WriteEndDocument();
}
Run Code Online (Sandbox Code Playgroud)
输出:
<?xml version="1.0" encoding="utf-8"?><Test>hello  world</Test>
Run Code Online (Sandbox Code Playgroud) 我想清除XmlTextWriter和StringWriter中的所有内容.Flush()没有成功.
XmlDocument doc = new XmlDocument();
StringWriter sw = new StringWriter();
XmlTextWriter xw = new XmlTextWriter(sw);
xw.WriteStartElement("AddPhoneQual");
xw.WriteElementString("Type", "B");
xw.WriteElementString("PhoneNumber", bookingDetails.PassengerList[0].PhoneNumber);
xw.WriteEndElement(); //结束AddPhoneQual
doc.LoadXml(sw.ToString());
现在,我需要清除所有内容并开始用清晰的xw编写.
xw.Flush();
sw.Flush();
他们没有工作.
我正在使用XmlTextWriter它的WriteElementString方法,例如:
XmlTextWriter writer = new XmlTextWriter("filename.xml", null);
writer.WriteStartElement("User");
writer.WriteElementString("Username", inputUserName);
writer.WriteElementString("Email", inputEmail);
writer.WriteEndElement();
writer.Close();
Run Code Online (Sandbox Code Playgroud)
预期的XML输出是:
<User>
<Username>value</Username>
<Email>value</Email>
</User>
Run Code Online (Sandbox Code Playgroud)
但是,如果例如inputEmail为空,则得到结果XML,如下所示:
<User>
<Username>value</Username>
<Email/>
</User>
Run Code Online (Sandbox Code Playgroud)
而我希望它是:
<User>
<Username>value</Username>
<Email></Email>
</User>
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?有没有办法以简单的方式使用XmlTextWriter?实现我的预期结果?
尝试将XmlDocument序列化为文件.XmlDocument相当大; 但是,在调试器中,我可以看到InnerXml属性中包含所有XML blob - 它没有被截断.
这是将我的XmlDocument对象写入文件的代码:
// Write that string to a file.
var fileStream = new FileStream("AdditionalData.xml", FileMode.OpenOrCreate, FileAccess.Write);
xmlDocument.WriteTo(new XmlTextWriter(fileStream, Encoding.UTF8) {Formatting = Formatting.Indented});
fileStream.Close();
Run Code Online (Sandbox Code Playgroud)
这里生成的文件只写入5,760行 - 它实际上是在标记中间截断的!
任何人都有任何想法为什么会在这里截断?
更新:我找到了问题的根源.在关闭文件流之前,我没有关闭XML Text Writer!D'哦!
我在LINQ中使用XDocument来编辑(插入)并保存xml文档.
XDocument doc = XDocument.Load("c:\\sample.xml", LoadOptions.PreserveWhitespace);
doc.Save("c:\\sample.xml",SaveOptions.DisableFormatting)
Run Code Online (Sandbox Code Playgroud)
doc.Save之前的sample.xml:
<ELEMENT ATTRIB1="attrib1" ATTRIB2="attrib2" >
value
</ELEMENT>
Run Code Online (Sandbox Code Playgroud)
doc.Save之后的sample.xml
<ELEMENT ATTRIB1="attrib1" ATTRIB2="attrib2">
value
</ELEMENT>
Run Code Online (Sandbox Code Playgroud)
如您所见,在原始文档中ATTRIB1之后有一个双空格,在ATTRIB2之后有一个空格.但是当我调用doc.save时,linq已经删除了这些空格.
如何保留标签内的空格?
文本中的'&'被转义并在&使用XmlTextWriter创建xml文件时转换为但我不希望转换如何防止它?
除了使用xmltextwriter的WriteRaw函数之外还有其他方法吗?
xmltextwriter ×10
c# ×9
xml ×8
xmlwriter ×2
.net ×1
escaping ×1
filestream ×1
linq-to-xml ×1
sql ×1
sql-server ×1
stringwriter ×1
vb.net ×1
xmldocument ×1
xmlnode ×1