当我从头开始构建XML时XmlDocument,该OuterXml属性已经通过换行符很好地缩进了所有内容.但是,如果我调用LoadXml一些非常"压缩"的XML(没有换行或缩进),那么输出会OuterXml保持这种状态.所以......
从一个实例中获取美化XML输出的最简单方法是XmlDocument什么?
我有一个创建一些XmlDocument的函数:
public string CreateOutputXmlString(ICollection<Field> fields)
{
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
settings.Encoding = Encoding.GetEncoding("windows-1250");
StringBuilder builder = new StringBuilder();
XmlWriter writer = XmlWriter.Create(builder, settings);
writer.WriteStartDocument();
writer.WriteStartElement("data");
foreach (Field field in fields)
{
writer.WriteStartElement("item");
writer.WriteAttributeString("name", field.Id);
writer.WriteAttributeString("value", field.Value);
writer.WriteEndElement();
}
writer.WriteEndElement();
writer.Flush();
writer.Close();
return builder.ToString();
}
Run Code Online (Sandbox Code Playgroud)
我设置了一个编码,但在我创建XmlWriter后,它确实有utf-16编码.我知道这是因为字符串(和我猜想的StringBuilder)是用utf-16编码的,你无法改变它.
那么如何在编码属性设置为"windows-1250"的情况下轻松创建此xml?它甚至不必在这种编码中编码,它只需具有指定的属性.
编辑:它必须在.Net 2.0中,因此不能使用任何新的框架元素.
我正在用XSD编写XML验证器.
以下是我所做的,但当验证器到达该行时,while (list.Read())它会给我错误
没有Unicode字节顺序标记.无法切换到Unicode.
任何人都可以帮我解决这个问题吗?
public class Validator
{
public void Validate(string xmlString)
{
Boolean bRet = true;
string xmlPath = @"C:\x.xml";
string xsdPath = @"C:\general.xsd";
XmlReaderSettings Settings = new XmlReaderSettings();
Settings.Schemas.Add("", xsdPath);
Settings.ValidationType = ValidationType.Schema;
Settings.ValidationEventHandler +=
new ValidationEventHandler(SettingsValidationEventHandler);
XmlReader list = XmlReader.Create(xmlPath, Settings);
//StringBuilder output = new StringBuilder();
while (list.Read())
{
}
//File.WriteAllText(@"D:\Output.xml", output.ToString());
}
static void SettingsValidationEventHandler(object sender,
ValidationEventArgs e)
{
if (e.Severity == XmlSeverityType.Warning)
{
MessageBox.Show( "WARNING: ");
MessageBox.Show(e.Message);
}
else if (e.Severity == …Run Code Online (Sandbox Code Playgroud) 我有一个XDocument对象,ToString()方法返回XML而没有任何缩进.如何从包含缩进的XML创建字符串?
编辑:我问的是如何创建一个内存字符串而不是写出文件.
编辑:看起来我不小心在这里问了一个技巧问题... ToString()确实返回缩进的XML.
WebRequest req = HttpWebRequest.Create("http://example.com/example");
WebResponse res = req.GetResponse();
StreamReader sr = new StreamReader(res.GetResponseStream());
string str = sr.ReadToEnd();
XmlDocument doc = new XmlDocument();
doc.LoadXml(str);
XmlTextWriter writer = new XmlTextWriter("D://myGameSite//myGames.xml", null);
writer.Formatting = Formatting.Indented;
doc.Save(writer);**strong text**
Response.Write(doc);
Run Code Online (Sandbox Code Playgroud)
现在这段代码工作正常我的意思是它将XML文件保存在myGameSite的根目录中,文件名为myGames,但是当我尝试在浏览器中显示这个XML文件时,你可以在代码中看到,它只是清楚地显示了这个
System.Xml.XmlDocument
Run Code Online (Sandbox Code Playgroud)
我想在我的浏览器中显示这个XML文件以及标签,我的asp.net和.netframework的版本是2.0所以请我不能使用LINQ :(