使用XmlReader读取xml
本文关键字:xml 读取 XmlReader 使用 | 更新日期: 2023-09-27 18:10:17
这是我要读取的xml
<servers>
<server name=" PIOU PIOU || OPTIMAL" ca="1" continent_code="EU"
country="France" country_code="FR" ip="s1.mymumble.fr"
port="20129" region="" url="http://www.mymumble.fr" />
</servers>
现在,当我读取它时,我成功地获得了元素'servers',我可以读取其innerxml,即创建了正确的节点。但是当我创建一个带有元素"server"的节点时,该节点是空的。我猜原因是"服务器"节点中使用的起始和结束元素的简短形式。但我的问题是,xml来自一些远程服务器,我不能修改它,所以我必须读它的方式,它是写的。
下面是我读取XML的代码:
List<XmlNode> nodeList = new List<XmlNode>();
XmlDocument doc = new XmlDocument();
while (reader.Read())
{
//keep reading until we see my element
if (reader.Name.Equals("server") && (reader.NodeType == XmlNodeType.Element))
{
XmlNode myNode = doc.ReadNode(reader);
Debug.Log(reader.IsEmptyElement ? "its empty" : "not empty");
//this always prints "its empty"
nodeList.Add(myNode);
}
}
foreach( XmlNode node in nodeList)
{
Debug.Log("child:'t"+node.FirstChild.InnerXml);
}
请参阅IsEmptyElement的文档。特别是这个例子:
<item num="123"/> (IsEmptyElement is true).
<item num="123"></item> (IsEmptyElement is false, although element content is empty).
节点被认为是空的,因为它使用了缩写形式。没有元素"content",但是有属性。
您是否检查了您创建的节点(即myNode
)以查看它是否包含属性?
XmlReader
对您的需求来说是一种较低的水平…
用Linq2Xml解析XML不是更容易吗?
var xmlStr = @"<servers>
<server name="" PIOU PIOU || OPTIMAL"" ca=""1"" continent_code=""EU""
country=""France"" country_code=""FR"" ip=""s1.mymumble.fr""
port=""20129"" region="""" url=""http://www.mymumble.fr"" />
</servers>";
var doc = XDocument.Parse(xmlStr);
var servers = doc.Root.Elements("server")
.Select(e => new{
name = (string)e.Attribute("name"),
ca = (int)e.Attribute("ca"),
country = (string)e.Attribute("country")
//etc...
});
XmlDocument有一个名为"GetNodes"的方法,它将帮助您。