我正在尝试使用linq-to-xml从头开始构建xml文档。
XElement root = new XElement("RootNode");
XDocument doc = new XDocument(
new XDeclaration("1.0", "utf-8", ""), root
);
for (int j = 0; j < 10; j++)
{
XElement element = new XElement("SetGrid");
element.SetElementValue("ID", j);
root.Add(element);
}
var reader = doc.CreateReader();//doc has 10 elements inside root element
string result = reader.ReadInnerXml();//always empty string
如何从XDocument
获取字符串?
答案 0 :(得分:2)
只需使用string result = doc.ToString()
或
var wr = new StringWriter();
doc.Save(wr);
string result = wr.ToString();
答案 1 :(得分:1)
根据文档,空字符串的一个选项。
XmlReader
返回:
当前节点中的所有XML内容,包括标记。如果 当前节点没有子节点,返回空字符串。如果 current节点既不是元素也不是属性,空字符串是 返回。
尝试:
XmlReader reader = doc.CreateReader();
reader.Read();
string result = reader.ReadInnerXml()
答案 2 :(得分:0)
var wr = new StringWriter();
doc.Save(wr);
var xmlString = wr.GetStringBuilder().ToString());
答案 3 :(得分:0)
完整的答案是here。
长话短说,你错过了reader.MoveToContent();
即。它应该是:
var reader = root.CreateReader();
reader.MoveToContent(); // <- the missing line
string result = reader.ReadInnerXml();
这样result
就会变空,你甚至不必创建XDocument
所以原始问题+修复的完整代码是:
XElement root = new XElement("RootNode");
for (int j = 0; j < 10; j++)
{
XElement element = new XElement("SetGrid");
element.SetElementValue("ID", j);
root.Add(element);
}
var reader = root.CreateReader();// root has 10 elements
reader.MoveToContent(); // <-- missing line
string result = reader.ReadOuterXml(); // now it returns non-empty string
输出:
<RootNode><SetGrid><ID>0</ID></SetGrid><SetGrid><ID>1</ID></SetGrid><SetGrid><ID>2</ID></SetGrid><SetGrid><ID>3</ID></SetGrid><SetGrid><ID>4</ID></SetGrid><SetGrid><ID>5</ID></SetGrid><SetGrid><ID>6</ID></SetGrid><SetGrid><ID>7</ID></SetGrid><SetGrid><ID>8</ID></SetGrid><SetGrid><ID>9</ID></SetGrid></RootNode>
注意:代码在Visual Studio 2013 / .NET Framework 4.5中进行了测试
MDSN参考:XmlReader.ReadOuterXml