[英]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.