簡體   English   中英

使用XmlReader讀取xml

[英]Reading xml with 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>

現在,當我閱讀它時,我就成功獲取了“服務器”,並且我也可以閱讀其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).

您的節點被認為是空的,因為它使用縮寫形式。 沒有元素“內容”,但也屬性。

您是否檢查了所創建的節點(即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”的方法,該方法將為您提供幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM