2011-07-01 100 views
1

我正在嘗試將XML文件綁定到DataGrid。我只是綁定了「交易」。我無法弄清的是如何綁定只有空節點的數據。例如,具有「NSmith」的「UserName」的事務沒有「CustomerFirst」的值。 我只想要這個孩子被綁定到DataGrid某些節點爲空的XML DataGrid

<Root> 

<Header> 
    <value1>0000000</value1> 
    <value2>1</value2> 
    <value3>100.00</value3> 
</Header> 

<Transactions> 
    <Txn> 
    <id></id> 
    <UserName>BSmith</User> 
    <CustomerFirst>Bob</CustomerFirst> 
    ... 
    </Txn> 
    <Txn> 
    <id></id> 
    <UserName>NSmith</User> 
    <CustomerFirst></CustomerFirst> 
    ... 
    </Txn> 
</Transactions> 

</Root> 

這裏是我的C#代碼:

serverPath = Server.MapPath("App_Data/" + xmlFileName); 
DataSet dsBillPay = new DataSet(); 
dsBillPay.ReadXml(serverPath); 
dgBillPay.DataSource = dsBillPay.Tables[1]; 
dgBillPay.DataBind(); 

的.Tables [1]是選擇 「交易」。 現在的問題是選擇具有空節點的數據。

預先感謝您。

回答

0

您可以使用Linq-to-Xml過濾掉所有使用值指定的子元素的元素,並僅包含那些缺少數據的元素。

以下示例檢索具有空元素但允許AddressTwo爲空的用戶。

string xmlText = @"<Root> 
        <Header> 
         <value1>0000000</value1> 
         <value2>1</value2> 
         <value3>100.00</value3> 
        </Header> 

        <Transactions> 
         <Txn> 
          <id>1</id> 
          <UserName>BSmith</UserName> 
          <CustomerFirst>Bob</CustomerFirst> 
         </Txn> 
         <Txn> 
          <id>2</id> 
          <UserName>NSmith</UserName> 
          <CustomerFirst></CustomerFirst> 
         </Txn> 
         <Txn> 
          <id></id> 
          <UserName>JSmith</UserName> 
          <CustomerFirst>James</CustomerFirst> 
         </Txn> 
         <Txn> 
          <id>4</id> 
          <UserName>KSmith</UserName> 
          <CustomerFirst>Kevin</CustomerFirst> 
          <AddressTwo></AddressTwo> 
         </Txn> 
        </Transactions> 

        </Root>"; 

var root = XElement.Parse(xmlText); 

    var elementsThatCanBeEmpty = new HashSet<XName> 
            { 
             XName.Get("AddressTwo") 
            }; 

    var transactionsWithoutCustomerFirst = 
     from transactions in root.Elements(XName.Get("Transactions")).Elements() 
     where transactions.Elements().Any 
      (
       el => 
       String.IsNullOrEmpty(el.Value) && 
       !elementsThatCanBeEmpty.Contains(el.Name) 
      ) 
     select transactions; 

foreach(var t in transactionsWithoutCustomerFirst) 
{ 
    Console.WriteLine(t.Element(XName.Get("UserName")).Value); 
} 
+0

感謝您的回覆。但是,此XML文件可能不僅僅是CustomerFirst節點爲空。 「txn」內共有20個節點可能爲空。然後我想將「Txn」綁定到DataGrid。 – Turp

+0

有沒有簡單的說法,如果「UserName或CustomerFirst或CustomerLast」是NullOrEmpty,那麼這個特定的Txn將在DataGrid中。 – Turp

+0

我們可以排除WHERE語句中的某些字段嗎?我們有AddressTwo這不是我們不想檢查的要求。 – Turp