过滤节点文本中包含大于字符的XML节点

时间:2011-07-06 13:39:56

标签: c# asp.net xml linq

我有一个来自XML文件的LINQ查询。我正在筛选出某些空子节点,但也希望过滤包含非法字符的节点。

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

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

如何修改LINQ查询以检查节点内的字符<是否大于。{/ p>

<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
                      };

1 个答案:

答案 0 :(得分:0)

看看这个。这是一个非常好的起点,您可以使用WHERE关键字来过滤XML数据

http://www.switchonthecode.com/tutorials/introduction-to-linq-simple-xml-parsing