2011-04-19 99 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