我有一个XML文档,里面有多个嵌套节点。它的结构不固定。我想根据用户传递的值过滤XML。即如果在所有1000个节点中,如果5个节点包含以' xyz'开头的值,那么我想要检索这5个节点。
我正在尝试使用LINQ to XML来实现这一点,因为我找不到' LIKK' xPath中的运算符类型。我应该在LINQ中写什么类型的查询?
到目前为止,我正在做类似下面的事情:
dim FilterString as string = "abc"
Dim doc = New XDocument(Linq.XElement.Parse(objXML.DocumentElement.OuterXml))
Dim query = doc.Elements()
query = From e In doc.Elements()
Where e.Value.ToUpper.StartsWith(FilterString.ToUpper)
Select e
Dim sb As New StringBuilder
For Each result In query
sb.AppendLine(result)
Next
示例XML将如下所示:
<root>
<node>
<p1>abcxys</p1>
<p2>anc</p2>
<c1>
<c2>abcggh</c2>
<c3>123</c3>
</c1>
</node>
</root>
我希望root / node / p1和root / node / c1 / c2作为我的结果。我怎么能这样做?
答案 0 :(得分:0)
如果它们可以在任何节点中,那么您将不得不查询每个节点,没有什么可以过滤。这可能是一个非常昂贵的过程。
string userInput = "abc";
var xDoc = XDocument.Load(@"C:\Test\Xml.xml");
var q = from e in xDoc.Descendants()
where e.Value.IndexOf(userInput) == 1
select e;
如果您只想测试字符串的第一部分,您仍然必须返回整个值并根据您的条件测试字符串。 此查询检查文本&#34; abc&#34;发生在字符串的开头(对于空字符串将返回0)并将返回需要该条件的元素集合。