2011-07-06 77 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

回答