这是我想要阅读的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>
现在当我阅读它时,我成功获得了elemnt'服务器',我也可以读取它的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);
}
答案 0 :(得分:2)
请参阅IsEmptyElement的文档。特别是这个例子:
<item num="123"/> (IsEmptyElement is true).
<item num="123"></item> (IsEmptyElement is false, although element content is empty).
您的节点被视为空,因为它使用短格式。没有元素&#34;内容,&#34;但是是属性。
您是否检查过您创建的节点(即myNode
),看它是否包含属性?
答案 1 :(得分:1)
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...
});
答案 2 :(得分:0)
XmlDocument有一个名为“GetNodes”的方法,可以帮助你。