我想创建具有特殊字符处理的
XML字符串.然而事实证明它太复杂并且通过生成错误的XML导致问题.
现在我正在考虑使用System.xml中的一些对象构建字符串,然后使用stringify()或从中获取字符串.我想这可以帮助我解决特殊情况.
现在我正在考虑使用System.xml中的一些对象构建字符串,然后使用stringify()或从中获取字符串.我想这可以帮助我解决特殊情况.
//Psudo code xmlDoc doc = new XMLDoc(); Element ele= new Element("xyz"); ele.value(Oob.property) doc.appendNode(ele); ... doc.getXMLString();
有人可以告诉我如何在C#.NET2.0中执行此操作.
解决方法
我发现XmlTextWriter比XmlDocument更直观,可以进行编辑.
例如.:
string xmlString = null; using(StringWriter sw = new StringWriter()) { XmlTextWriter writer = new XmlTextWriter(sw); writer.Formatting = Formatting.Indented; // if you want it indented writer.WriteStartDocument(); // <?xml version="1.0" encoding="utf-16"?> writer.WriteStartElement("TAG"); //<TAG> // <SUBTAG>value</SUBTAG> writer.WriteStartElement("SUBTAG"); writer.WriteString("value"); writer.WriteEndElement(); // <SUBTAG attr="hello">world</SUBTAG> writer.WriteStartElement("SUBTAG"); writer.WriteStartAttribute("attr"); writer.WriteString("hello"); writer.WriteEndAttribute(); writer.WriteString("world"); writer.WriteEndElement(); writer.WriteEndElement(); //</TAG> writer.WriteEndDocument(); xmlString = sw.ToString(); }
在此代码之后xmlString将包含:
<?xml version="1.0" encoding="utf-16"?> <TAG> <SUBTAG>value</SUBTAG> <SUBTAG attr="hello">world</SUBTAG> </TAG>
附加信息:
使用XmlDocument将是:
XmlDocument doc = new XmlDocument(); XmlNode tagNode = doc.CreateNode(XmlNodeType.Element,"TAG",null); doc.AppendChild(tagNode); XmlNode subTagNode1 = doc.CreateNode(XmlNodeType.Element,"SUBTAG",null); tagNode.AppendChild(subTagNode1); XmlText subTagNode1Value = doc.CreateTextNode("value"); subTagNode1.AppendChild(subTagNode1Value); XmlNode subTagNode2 = doc.CreateNode(XmlNodeType.Element,null); tagNode.AppendChild(subTagNode2); XmlAttribute subTagNode2Attribute = doc.CreateAttribute("attr"); subTagNode2Attribute.Value = "hello"; subTagNode2.Attributes.SetNamedItem(subTagNode2Attribute); XmlText subTagNode2Value = doc.CreateTextNode("world"); subTagNode2.AppendChild(subTagNode2Value); string xmlString = null; using(StringWriter wr = new StringWriter()) { doc.Save(wr); xmlString = wr.ToString(); }