在xml文档中按内部文本查找xml节点

时间:2014-06-09 06:57:45

标签: c# xml xpath

如何通过内部文本从xml文档中检索节点。 例如

 <w:t>WARNING</w:t>

节点在xml文档中多次包含不同的值。 我想只检索那些内部文本包含“警告”的w:t节点。

怎么做?

3 个答案:

答案 0 :(得分:1)

要查询带前缀的元素,您必须使用XmlNamespaceManager注册正确的前缀到命名空间URI映射,然后在XPath中使用该注册的前缀,例如:

var xml = @"<root xmlns:w=""test"">
    <w:t>WARNING</w:t>
</root>";
var xmlDoc = new XmlDocument();
xmlDoc.LoadXml(xml);

var nsManager = new XmlNamespaceManager(xmlDoc.NameTable);
//register proper prefix-to-namespace-URI mapping
nsManager.AddNamespace("w", "test");

//following XPath used to select <w:t> nodes with inner text contains "WARNING"
var result = xmlDoc.DocumentElement.SelectSingleNode("//w:t[contains(., 'WARNING')]", nsManager);
//print result
Console.WriteLine(result.OuterXml);

答案 1 :(得分:0)

试试这个:

var wtNodes = elements.Where(e => e.Name.LocalName.Equals("w:t"));
var warningNodes = wtNodes.Where(node => node.Value.Contains("WARNING"));

答案 2 :(得分:0)

试试这个:

xmlNodeList  xNlist=  xDoc.selectNodes("//pre:t[.="WARNING"]",objXmlnsMgr);

下面: xDoc是XmlDocument; objXmlnsMgr是XmlNamespaceManager(&#39; w&#39;在你的情况下)&amp; pre是它的前缀。