xmlTextReader.ReadInnerXml() 将我的整个 XML 文档拉入一个变量中
本文关键字:一个 变量 文档 我的 xmlTextReader XML ReadInnerXml | 更新日期: 2023-09-27 18:33:27
我正在创建要在后面的步骤中读取的XML索引文件。我有可变长度的数组,我将它们写入一个文件。
有一个问题,我认为它在阅读器代码中。由于某种原因,TimeStamp 和 Long 元素被正确地读入数组,但 Lat 和 VideoFile 元素被跳过。出于某种原因,他们的 reader.nodetype 永远不会返回。read() 方法拾取它们的唯一方法是在 TEXT 节点类型中,然后它只显示 innerxml 值,这对我来说毫无用处。
保存 XML 文件示例后,下面的代码应该可以完全运行。
再次感谢堆栈用户。
创造
using System.Xml;
XmlTextWriter xmlwriter = new XmlTextWriter(file, null);
xmlwriter.Formatting = Formatting.Indented;
//xmlwriter.Indentation = 4;
xmlwriter.WriteStartDocument();
xmlwriter.WriteStartElement("Index");
for (int i = 0; i < malLat.Count; i++)
{
xmlwriter.WriteStartElement("Marker");
xmlwriter.WriteStartElement("TimeStamp");
xmlwriter.WriteString(malTimes[i].ToString());
xmlwriter.WriteEndElement();
xmlwriter.WriteStartElement("Lat");
xmlwriter.WriteString(malLat[i].ToString());
xmlwriter.WriteEndElement();
xmlwriter.WriteStartElement("Long");
xmlwriter.WriteString(malLong[i].ToString());
xmlwriter.WriteEndElement();
xmlwriter.WriteStartElement("VideoFile");
xmlwriter.WriteString(malVideoTitle[i].ToString());
xmlwriter.WriteEndElement();
xmlwriter.WriteEndElement();
}
xmlwriter.WriteEndElement();
xmlwriter.WriteEndDocument();
xmlwriter.Close();
读数
using System.Xml;
XmlTextReader lxmlReader = new XmlTextReader(mstrIndexFile + ".xml");
lxmlReader.WhitespaceHandling = WhitespaceHandling.None;
while (lxmlReader.Read())
{
if (lxmlReader.NodeType == XmlNodeType.Element)
{
if (lxmlReader.Name == "TimeStamp")
{
malTimes.Add(lxmlReader.ReadInnerXml().ToString());
}
else if (lxmlReader.Name == "Lat")
{
malLat.Add(lxmlReader.ReadInnerXml().ToString());
}
else if (lxmlReader.Name == "Long")
{
malLong.Add(lxmlReader.ReadInnerXml().ToString());
}
else if (lxmlReader.Name == "VideoFile")
{
malVideoTitle.Add(lxmlReader.ReadInnerXml().ToString());
}
}
}
lxmlReader.Close();
XML 文档示例
<Index>
<Marker>
<TimeStamp>2011-7-17 23:18:39</TimeStamp>
<Lat>-121.261953323166</Lat>
<Long>43.0594755392741</Long>
<VideoFile>C:'Users'kpenner'Desktop'Video Dev'1_1.wmv</VideoFile>
</Marker>
<Marker>
<TimeStamp>2011-7-17 23:18:40</TimeStamp>
<Lat>-122.260755</Lat>
<Long>46.05878</Long>
<VideoFile>C:'Users'kpenner'Desktop'Video Dev'1_1.wmv</VideoFile>
</Marker>
</Index>
问题 XmlTextReader 是只进读取器。 当您对叶节点上的读取器执行 ReadInnerXml 时,它会移动到下一个元素(请参阅 http://msdn.microsoft.com/en-us/library/system.xml.xmlreader.readinnerxml.aspx)。 因此,在这种情况下,当您点击TimeStamp并执行ReadInnerXml时,读取器会将Lat Element类型移动到Lat Element类型,因为这4个元素是叶节点。 然后你在 while 循环中再次阅读,这会将阅读器移动到 Lat 的 Text 元素。 由于您只检查元素类型,因此它会自行解决,直到您点击 Long,然后出于同样的原因破坏 VideoFile。
这是另一个SO问题的链接,其中包含可能有助于您的解决方案的答案:XMLTextReader不读取元素内容。