2011-04-19 101 views
1

考慮下面的XML的LINQ to XML LIKE子句

<?xml version="1.0"?> 
<Message> 
     <ArrayOfStock xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
      <Stock> 
        <StockID>9cddb639-25ee-4415-be07-3109e5ae9883</StockID> 
        <Description>Stock Item 0</Description> 
      </Stock> 
      <Stock> 
        <StockID>f89f02f9-b359-48c8-8d2f-3a950837f4fb</StockID> 
        <Description>Stock Item 1</Description> 
      </Stock> 
      <Stock> 
        <StockID>3338ec80-f59e-4979-a04c-f7d52e386bb7</StockID> 
        <Description>Stock Item 2</Description> 
      </Stock> 
     </ArrayOfStock> 
</Message> 

是否有返回消息的孩子們在兒童的名字開始與「ArrayOf」,那麼這更好/更正確的方法是什麼?

IEnumerable<XElement> array = from arrayOfX 
           in document.Root.Elements() 
           where arrayOfX.Name.ToString().IndexOf("ArrayOf") > -1 
           select arrayOfX; 

PS:這對邊緣情況也有問題,其中IndexOf()將爲String.Empty值返回0。 (雖然不確定這是否可以在格式良好的XML中實現 - 不認爲它是?)

回答

3
+0

嗯。那麼現在我覺得自己像一隻鵝...忘了那種方法。 – 2011-04-19 06:37:42

+0

.NET中有很多有用的'String'方法('Contains','StartsWith','EndsWith'來命名,但是三個) - 學習它們! – 2011-04-19 23:03:48

+0

是的,指揮官! :-p – 2011-04-27 02:21:51

0

返回建模xml結構的對象的更好方法是什麼?是。創建一個類,模型XML結構和序列化XML作爲這樣的:

[XmlRootAttribute("ArrayOfStocks")] 
public class Stocks 
{  
    [XmlArrayItem(typeof(Stock))]  
    public Stock[] Stocks { get; set; } 
} 
public class Stock 
{ 
    public StockID { get; set; } 

    public Description { get; set; } 
} 
    public class Message 
    { 
     public Stocks { get; set; } 

     public static Message Load(string xml) 
     { 
       var deserializer = new XmlSerializer(typeof(Stocks)); 
       Stocks stocks = null; 
       using(TextReader textReader = new StringReader(data)) 
       { 
        stocks = (Stocks)deserializer.Deserialize(textReader); 
       } 

       return stocks; 
     } 
    } 

然後,您可以通過訪問個股的數組:

var message = Message.Load("<xml>"); 
foreach(var stock in message.Stocks) 
{ 
    Console.WriteLine(stock); 
} 

然後,在你的「邊緣案」,你將不必擔心它。股票數組將簡單地被搶走。

+0

欣賞建議,但不幸的是在我的情況下,這是行不通的。我解析的XML完全是任意的,我無法知道它的結構,我只是簡單地提供了股票作爲例子。 – 2011-04-19 06:33:28

+0

我明白了。 NP。關鍵詞是任意的,這在OP中並不清楚 – danielpops 2011-04-19 06:49:27