Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用XmlReader读取xml_C#_Xml_Xmlreader - Fatal编程技术网

C# 使用XmlReader读取xml

C# 使用XmlReader读取xml,c#,xml,xmlreader,C#,Xml,Xmlreader,下面是我想要阅读的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&g

下面是我想要阅读的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);
}
List nodeList=new List();
XmlDocument doc=新的XmlDocument();
while(reader.Read())
{
//继续读,直到我们看到我的元素
if(reader.Name.Equals(“server”)&&(reader.NodeType==XmlNodeType.Element))
{
XmlNode myNode=doc.ReadNode(读卡器);
Log(reader.IsEmptyElement?“其为空”:“不为空”);
//这总是打印“它是空的”
nodeList.Add(myNode);
}        
}
foreach(节点列表中的XmlNode节点)
{
Log(“child:\t”+node.FirstChild.InnerXml);
}

XmlDocument有一个名为“GetNodes”的方法,可以帮助您。

XmlDocument有一个名为“GetNodes”的方法,可以帮助您。

XmlDocument有一个名为“GetNodes”的方法,可以帮助您。

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...
                 });
var xmlStr=@”
";
var doc=XDocument.Parse(xmlStr);
var servers=doc.Root.Elements(“服务器”)
.选择(e=>new{
名称=(字符串)e.Attribute(“名称”),
ca=(int)e.Attribute(“ca”),
国家=(字符串)e.Attribute(“国家”)
//等等。。。
});

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...
                 });
var xmlStr=@”
";
var doc=XDocument.Parse(xmlStr);
var servers=doc.Root.Elements(“服务器”)
.选择(e=>new{
名称=(字符串)e.Attribute(“名称”),
ca=(int)e.Attribute(“ca”),
国家=(字符串)e.Attribute(“国家”)
//等等。。。
});

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...
                 });
var xmlStr=@”
";
var doc=XDocument.Parse(xmlStr);
var servers=doc.Root.Elements(“服务器”)
.选择(e=>new{
名称=(字符串)e.Attribute(“名称”),
ca=(int)e.Attribute(“ca”),
国家=(字符串)e.Attribute(“国家”)
//等等。。。
});

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...
                 });
var xmlStr=@”
";
var doc=XDocument.Parse(xmlStr);
var servers=doc.Root.Elements(“服务器”)
.选择(e=>new{
名称=(字符串)e.Attribute(“名称”),
ca=(int)e.Attribute(“ca”),
国家=(字符串)e.Attribute(“国家”)
//等等。。。
});
有关详细信息,请参阅文档。特别是,这个例子:

<item num="123"/> (IsEmptyElement is true).
<item num="123"></item> (IsEmptyElement is false, although element content is empty).
(IsEmptyElement为true)。
(IsEmptyElement为false,尽管元素内容为空)。
您的节点被认为是空的,因为它使用缩写形式。没有“内容”元素,但有属性

您是否已检查您创建的节点(即
myNode
)以查看它是否包含属性?

有关详细信息,请参阅文档。特别是,这个例子:

<item num="123"/> (IsEmptyElement is true).
<item num="123"></item> (IsEmptyElement is false, although element content is empty).
(IsEmptyElement为true)。
(IsEmptyElement为false,尽管元素内容为空)。
您的节点被认为是空的,因为它使用缩写形式。没有“内容”元素,但有属性

您是否已检查您创建的节点(即
myNode
)以查看它是否包含属性?

有关详细信息,请参阅文档。特别是,这个例子:

<item num="123"/> (IsEmptyElement is true).
<item num="123"></item> (IsEmptyElement is false, although element content is empty).
(IsEmptyElement为true)。
(IsEmptyElement为false,尽管元素内容为空)。
您的节点被认为是空的,因为它使用缩写形式。没有“内容”元素,但有属性

您是否已检查您创建的节点(即
myNode
)以查看它是否包含属性?

有关详细信息,请参阅文档。特别是,这个例子:

<item num="123"/> (IsEmptyElement is true).
<item num="123"></item> (IsEmptyElement is false, although element content is empty).
(IsEmptyElement为true)。
(IsEmptyElement为false,尽管元素内容为空)。
您的节点被认为是空的,因为它使用缩写形式。没有“内容”元素,但有属性


您是否检查了您创建的节点(即
myNode
)以查看它是否包含属性?

“但是当我使用元素“server”创建节点时…”。。。这是什么意思??您使用XmlReader有什么原因吗?使用LinqToXml不是更容易吗?正如您所看到的,节点服务器有很多信息,比如名称、国家/地区等。但是我通过'doc.ReadNode(reader)'创建的节点中没有任何信息。不,没有使用XmlReader的具体原因。“但是,当我使用元素'server'创建节点时。。。这是什么意思??您使用XmlReader有什么原因吗?使用LinqToXml不是更容易吗?正如您所看到的,节点服务器有很多信息,比如名称、国家/地区等。但是我通过'doc.ReadNode(reader)'创建的节点中没有任何信息。不,没有使用XmlReader的具体原因。“但是,当我使用元素'server'创建节点时。。。这是什么意思??您使用XmlReader有什么原因吗?使用LinqToXml不是更容易吗?正如您所看到的,节点服务器有很多信息,比如名称、国家/地区等。但是我通过“doc.ReadNode(reader)”创建的节点中没有任何信息。不,没有