簡體   English   中英

名稱不能以“1”字符開頭,十六進制值0x31。 從xml文件中讀取時

[英]Name cannot begin with the '1' character, hexadecimal value 0x31. while reading from an xml file

我正在使用xml文件來讀取內容並將其顯示在帶有復選框的樹視圖列表中。 其條件是應根據用戶在組合框中選擇的內容顯示內容。 假設用戶在組合框中選擇了2,則樹視圖列表應顯示2的內容(來自xml文件)。 我嘗試過:

private void pjctsel_cmbbox_SelectedIndexChanged(object sender, EventArgs e)
{            
    var xmldoc = File.ReadAllText(@"D:\\test.xml");
    var str = XElement.Parse(xmldoc);
    cmbbox_val = pjctsel_cmbbox.SelectedIndex.ToString();
***  var res = str.Elements(cmbbox_val).Where(x => x.Element("general").Value.Equals(cmbbox_val)).ToList();
    MessageBox.Show(res.ToString());
}
cmbbox_val = user selected value from combobox.

xmlfile內容是:

<serv>
    <general name="one">    
    <server name="oneone">
        <service name="1143"/>
        <service name="1142"/>
    </server>
</general>
<general name="two">        
    <server name ="twoone">
        <service name="2143"/>
        <service name="2142"/>
    </server>
</general>
</serv>

在我的c#代碼中,我標記了*我得到以下異常“名稱不能以'1'字符開頭,十六進制值0x31。”

谷歌搜索它,但我只能找到那些用標簽字符串1開始他們的xml文件的人。

有什么想法嗎?

任何想法都會非常感激..

編輯:

我的組合框的值為一,二。

我正在嘗試的是,如果用戶在組合框中選擇值2,那么我的應用程序需要檢查xml文件中名稱為2的條目,如果發現任何匹配,則“服務器名稱”節點和“服務”名稱“對應於兩個的節點,必須顯示在樹視圖列表中。

希望這有道理..

cmbbox_val = pjctsel_cmbbox.SelectedIndex.ToString();   // SelectedIndex is an integer

var res = str
            .Elements(cmbbox_val)                      // so this will fail
            .Where(x => x.Element("general")
            .Value.Equals(cmbbox_val)).ToList();

這可能有效:

cmbbox_val = pjctsel_cmbbox.SelectedItem.ToString();   // or SelectedItem.SomeProperty

但我也注意到你正在尋找cmbbox_val 2次,而Element("general")已經是你的XML的根。 所以這不起作用,但我們沒有信息來解決它。


編輯后:

  1. 我的組合框的值為一,二。
  2. 需要在xml文件中檢查名稱為2的條目
  3. 那么“服務器名稱”節點和“服務名稱”節點必須顯示在樹視圖列表中。

步驟1)和2)

var str = XElement.Parse(xmldoc);
IEnumerable<XElement> generals = str
       .Elements("general")
       .Where(g => g.Attribute("name") == cmbbox_val);

並且因為該結果是分層的,我會將它與foreach()而不是Linq一起使用,如下所示:

foreach(var general in generals)  // probably only 1
{
   foreach (var server in general.Elements("server"))
   {
       string serverName = server.Attribute("name").value;

       foreach(var service  in server.Elements("service"))
       {
           // etc
       }
   }
}

根據MSDN XElement.Elements()將一個字符串作為參數,該字符串表示要選擇的元素的名稱。 名稱不能以1開頭,因為你傳遞了Elements() cmbbox_val ,所以你得到了這個錯誤。

你正在使用那個cmbbox_val作為Value.Equals和節點選擇器:我敢打賭它包含string "1143"

問題是您將integer作為XElement name傳遞。 名稱不應以數字開頭。 可能的錯誤是你的代碼中你通過了組合框。 SelectedIndex 如果你已經正確配置組合框(即1,“一個” 2“,二)你應該通過下拉框。 SelectedValue如果您不填寫您可以更改代碼作為組合框的值列表:

private void pjctsel_cmbbox_SelectedIndexChanged(object sender, EventArgs e)
    {            
        var xmldoc = File.ReadAllText(@"D:\\test.xml");
        var str = XElement.Parse(xmldoc);
        string cmbbox_val = pjctsel_cmbbox.SelectedIndex==0 ? "one" : "two";
        var res = str.Elements(cmbbox_val).Where(x => x.Element("general").Value.Equals(cmbbox_val)).ToList();
        MessageBox.Show(res.ToString());
    }

暫無
暫無

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

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