如何通过读取空属性节点来跳过 XML Reader?
How do I Skip XML Reader by reading empty attribute node?
我想在这种 XML document.Currently 我的程序使用 XmlTextReader 读取和处理这个 XML 中跳过空 id 父节点并移动到非空 id 父节点。但是有时记录 id 可能是空的,那时我想跳过这个记录父节点并且 reader 应该移动到下一个节点而不读取那个空的 id 父节点。伙计们,你有什么想法吗?
请帮帮我!!!
`<record id="">
<record><data></data></record>
<record><data></data></record>
</record>
<record id="###">
<record><data></data></record>
<record><data></data></record>
</record>
`
我喜欢结合使用 XmlReader 和 Xml Linq :
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
namespace ConsoleApplication1
{
class Program
{
const string FILENAME = @"c:\temp\test.xml";
static void Main(string[] args)
{
XmlReader reader = XmlReader.Create(FILENAME);
while (!reader.EOF)
{
if (reader.Name != "record")
{
reader.ReadToFollowing("record");
}
if (!reader.EOF)
{
XElement record = (XElement)XElement.ReadFrom(reader);
string id = (string)record.Attribute("id");
if (id.Length > 0)
{
Console.WriteLine("id = '{0}'", id.ToString());
}
}
}
Console.ReadLine();
}
}
}
我想在这种 XML document.Currently 我的程序使用 XmlTextReader 读取和处理这个 XML 中跳过空 id 父节点并移动到非空 id 父节点。但是有时记录 id 可能是空的,那时我想跳过这个记录父节点并且 reader 应该移动到下一个节点而不读取那个空的 id 父节点。伙计们,你有什么想法吗? 请帮帮我!!!
`<record id="">
<record><data></data></record>
<record><data></data></record>
</record>
<record id="###">
<record><data></data></record>
<record><data></data></record>
</record>
`
我喜欢结合使用 XmlReader 和 Xml Linq :
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
namespace ConsoleApplication1
{
class Program
{
const string FILENAME = @"c:\temp\test.xml";
static void Main(string[] args)
{
XmlReader reader = XmlReader.Create(FILENAME);
while (!reader.EOF)
{
if (reader.Name != "record")
{
reader.ReadToFollowing("record");
}
if (!reader.EOF)
{
XElement record = (XElement)XElement.ReadFrom(reader);
string id = (string)record.Attribute("id");
if (id.Length > 0)
{
Console.WriteLine("id = '{0}'", id.ToString());
}
}
}
Console.ReadLine();
}
}
}