2011-07-06 44 views
4

我从XML文件中获取LINQ查询。我正在过滤出某些有空子节点的节点,但也希望过滤包含非法字符的节点。在节点文本中过滤包含大于号字符的XML节点

从下面的示例中,您可以看到我正试图过滤其中也包含大于号字符<的节点。 (请参阅XML示例中的child3)

但是,这不起作用。我可以测试节点内的其他字符,如*,但<不起作用。

如何修改我的LINQ查询来检查节点内的大于号字符<

<Root> 
    <Header> 
     <total>123456</total> 
    </Header> 
    <Transactions> 
     <Txn> 
     <child1>BSmith</value1> 
     <child2>Bob Smith</child2> 
     <child3>Acme Company<</child3> 
     <child4>Suite 3B</child4> 
     <child5>1234 Main Street</child5> 
     </Txn> 
     ... 
    </Transactions> 
</Root> 

var root = XElement.Parse(xmlText);     
var elementsThatCanBeEmpty = new HashSet<XName> 
{ 
    XName.Get("child4") 
}; 

var transactionList = from transactions in 
         root.Elements(XName.Get("Transactions")) 
         .Elements().AsEnumerable() 
         where transactions.Elements().Any 
         (
         el => 
         (String.IsNullOrEmpty(el.Value) || el.Value.Contains("*")) && 
         !elementsThatCanBeEmpty.Contains(el.Name) 
        ) 
         select new 
         { 
         UserName = transactions.Element(XName.Get("child1")).Value 
         }; 
+3

那岂不是<文件中是非法 - 也就是说,不是有效的XML?它应该被编码。如果它被编码,你应该能够查找编码值。 –

+3

您发布的XML无效,因此代码的第一行应该引发异常,并且不能将LINQ to XML用于“XML”之类的内容。 – svick

+0

@ schroedingers-cat,现在你提到它,是的,这将是非法的。第三方公司向我们发送这个xml文件,我正在检查文件中的不一致和空节点。恰巧,最终用户可以在一个字段内输入一个<。那么当生成XML文件时,我们将它与<节点内部的< – Turp

回答