使用XPath从XML文件中提取XML元素

时间:2009-09-18 14:13:14

标签: c# xml xpath

我有以下XML文档:

  <MimeType>
     <Extension>.aab</Extension>
     <Value>application/x-authorware-</Value>
  </MimeType>
  <MimeType>
     <Extension>.aam</Extension>
     <Value>application/x-authorware-</Value>
  </MimeType>

整个文档包含大约700个条目。如何使用 XPath 提取单个MimeType元素并将其填充到强类型C#MimeType对象中?

4 个答案:

答案 0 :(得分:14)

使用XmlDocument.SelectSingleNode

示例:

XmlDocument doc = new XmlDocument();
doc.Load("yourXmlFileName");
XmlNode node = doc.SelectSingleNode("yourXpath");

然后,您可以访问node.ChildNodes以获取所需的值(示例):

string extension = node.ChildNodes[0].InnerText;
string value = node.ChildNodes[1].InnerText;

然后在构造MimeType对象时使用这些值。

编辑:一些XPath信息。
有一些非常好的XPath教程,请尝试herehereW3C recommendation本身可能有点压倒性 对于您的示例,您可以尝试使用以下XPath来选择文档中的第一个MimeType节点(其中root是根元素的名称):

string xPath = "root/MimeType[1]"

希望有所帮助!

答案 1 :(得分:2)

以下方法应提供在此处获取MIME类型的框架

public MimeType RunXPath(string mimeType)
{
  XmlNode node = _xmlDoc.SelectSingleNode(
    string.Format("//MimeType/Extension[text()="{0}"]/ancestor::MimeType", mimeType));
  foreach(XmlNode node in nodes)
  {
    // Extract the relevant nodes and populate the Mime Type here...
  }

  return ...
}

诀窍是根据扩展中的文本找到MimeType,然后为此匹配检索MimeType的祖先。

答案 2 :(得分:1)

您使用System.Xml.XPath命名空间中的类。

Tutorials from MSDN

答案 3 :(得分:1)

跟进the answer by @MiffTheFox,您可以将 XPath LINQ to XML 结合使用。以下是基于您的示例数据的示例。

1)首先,您需要的命名空间:

using System.Linq;
using System.Xml;
using System.Xml.Linq;
using System.Xml.XPath;

2)将XML文档加载到XElement

XElement rootElement = XElement.Parse(xml);

3)定义XPath位置路径:

// For example, to locate the 'MimeType' element whose 'Extension'
// child element has the value '.aam':
//
//     ./MimeType[Extension='.aam']

string extension = ".aam";
string locationPath = String.Format("./MimeType[Extension='{0}']", extension);

4)将位置路径传递给XPathSelectElement()以选择感兴趣的元素:

XElement selectedElement = rootElement.XPathSelectElement(locationPath);

5)最后,提取与扩展程序相关联的MimeType值:

var mimeType = (string)selectedElement.Element("Value");