Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 如何搜索包含特定文本的XML节点?_Vb.net_Linq_Linq To Xml - Fatal编程技术网

Vb.net 如何搜索包含特定文本的XML节点?

Vb.net 如何搜索包含特定文本的XML节点?,vb.net,linq,linq-to-xml,Vb.net,Linq,Linq To Xml,我有一个包含多个嵌套节点的XML文档。它的结构不是固定的。我想根据用户传递的值过滤XML。i、 e如果在所有1000个节点中,如果5个节点包含以“xyz”开头的值,则我要检索这5个节点 我正在尝试使用LINQtoXML来实现这一点,因为我在xPath中找不到“LIKK”类型的运算符。我应该用LINQ写什么样的查询 到目前为止,我做了如下工作: dim FilterString as string = "abc" Dim doc = New XDocument(L

我有一个包含多个嵌套节点的XML文档。它的结构不是固定的。我想根据用户传递的值过滤XML。i、 e如果在所有1000个节点中,如果5个节点包含以“xyz”开头的值,则我要检索这5个节点

我正在尝试使用LINQtoXML来实现这一点,因为我在xPath中找不到“LIKK”类型的运算符。我应该用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>

abcxys
非国大
abcggh
123

我想要root/node/p1和root/node/c1/c2作为我的结果。我怎样才能做到这一点呢?

如果它们可以在任何节点中,那么您必须查询每个节点,没有什么可以过滤的。这可能是一个非常昂贵的过程

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;
如果您只想测试字符串的第一部分,您仍然需要返回整个值并根据您的条件测试字符串。 此查询检查文本“abc”是否出现在字符串的开头(空字符串返回0),并返回需要该条件的元素集合