C# 筛选节点文本中包含大于字符的XML节点

C# 筛选节点文本中包含大于字符的XML节点,c#,asp.net,xml,linq,C#,Asp.net,Xml,Linq,我有一个来自XML文件的LINQ查询。我正在筛选出某些具有空子节点的节点,但也希望筛选包含非法字符的节点 从下面的示例中,您可以看到,我正在尝试筛选具有大于字符的节点。请看一下。这是一个非常好的起点,您可以使用WHERE关键字来过滤XML数据 文件中的

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


从下面的示例中,您可以看到,我正在尝试筛选具有大于字符的节点。请看一下。这是一个非常好的起点,您可以使用WHERE关键字来过滤XML数据


文件中的<不表示它是非法的吗?也就是说,不是有效的xml?它应该被编码。如果它是编码的,您应该能够查找编码的值。您发布的XML是无效的,因此代码的第一行应该抛出异常,您不能使用LINQ to XML来处理这样的“XML”。@schroedingers cat,既然您提到了它,是的,它将是非法的。第三方公司向我们发送此xml文件,我正在检查文件中是否存在不一致和空节点。恰好最终用户可以在字段中输入<。然后,当生成XML文件时,我们使用节点内的<获取它。然后我建议第一步是在尝试使用XML工具之前验证XML是否有效。@Nick,如果用户输入

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