簡體   English   中英

在Compact Framework 3.5中解析XML

[英]Parsing XML in Compact Framework 3.5

我需要解析以下XML,但是遇到一些問題。 首先,我在Class標記中擁有的標記數量未知,並且它們也不是唯一的(因此我無法通過其名稱來指定它們)。

XML范例:

<Class value="1B2">
    <FirstName>Bob</FirstName>
    <FirstName>Jim</FirstName>
    <FirstName>Alice</FirstName>
    <FirstName>Jessica</FirstName>
    //(More similar lines, number is not known)
</Class>
<Class value="2C4">
    <FirstName>Bob</FirstName>
    <FirstName>Jim</FirstName>
    <FirstName>Alice</FirstName>
    <FirstName>Jessica</FirstName>
    //(More similar lines, number is not known)
</Class>

現在,這是到目前為止我的代碼來解析它:

定義xmlReader和XElement

XmlReader xmlReader = XmlReader.Create(modFunctions.InFName);
XElement xElem = new XElement("FirstName");

然后,我將連接到SQL Server CE數據庫,這是讀取xmlfile的主循環:

while (xmlReader.Read())
{
    if (xmlReader.NodeType == XmlNodeType.Element &&
        (xmlReader.LocalName == "Class" || xmlReader.LocalName == "FirstName") &&
        xmlReader.IsStartElement() == true)
    {
        // Find Class tag
        if (xmlReader.LocalName == "Class")
        {
            xElem = (XElement)XNode.ReadFrom(xmlReader);
            // Get 1B2 value
            HRName = xElem.FirstAttribute.Value;

            // Tried to read each node in xElement to get FirstName values.. this didn't work
            for ( (XNode e in (XNode)xElem)
            {
                string newString = ((string)xElem.Element("FirstName"));
            }

        }

        // Also tried this before, but it is skips it since FirstName tags are inside Class tag. 
        if (xmlReader.LocalName == "FirstName")
        {
            xElem = (XElement)XNode.ReadFrom(xmlReader);
            record.SetValue(0, xElem.Value);
            record.SetValue(1, HRName);
            rs.Insert(record);
        }
    }
}

在我的表中(我試圖寫到的地方)由兩列組成(FirstName和Class)

如評論中所述,Linq to Xml是您最好的選擇: http : //msdn.microsoft.com/zh-cn/library/system.xml.linq (v=vs.90) .aspx

您的解析將類似於:

        string xml = "<root><Class value='1B2'><FirstName>Bob</FirstName><FirstName>Jim</FirstName><FirstName>Alice</FirstName><FirstName>Jessica</FirstName></Class>" +
                     "<Class value='2C4'><FirstName>Bob</FirstName><FirstName>Jim</FirstName><FirstName>Alice</FirstName><FirstName>Jessica</FirstName></Class></root>";
        XDocument doc = XDocument.Parse(xml);
        foreach(var node in doc.Descendants("Class"))
        {
            var cls = node.Attribute("value").Value;
            string[] firstNames = node.Descendants("FirstName").Select(o => o.Value).ToArray();
        }

暫無
暫無

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

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