如何提取XML数据

本文关键字:XML 数据 提取 何提取 | 更新日期: 2023-09-27 18:01:20

我有一个XML文件,其中包含以下数据,

<extcode Type="abc" Code="12345" />

我希望能够为Type为abc的行提取Code,即12345。我试过

XPathSelectElements("Type[@name='abc']")

但它什么也没回。

谢谢。

编辑我发现问题出在命名空间上。XML文件类似于aw:extcode,而不仅仅是extcode,这导致查询无法正常工作。在存在名称空间的情况下,我应该如何做?当我尝试使用时

XmlNameTable nameTable = doc.NameTable;

编译器抱怨无法解析NameTable。

如何提取XML数据

使用此XPath://extcode[@Type = 'abc']/@Code

就我个人而言,我会使用LINQ to XML作为处理XML数据的首选方式。类似这样的东西:

XDocument doc = XDocument.Load("test.xml");
int code = doc.Descendants("extCode")
              .Where(x => (string) x.Attribute("Type") == "abc")
              .First()
              .Attribute("Code");

XPath不起作用的一个原因可能是该属性被称为"Type"而不是"name"。。。

您可以这样写↓

        XDocument doc = XDocument.Load("test.xml");
        var x = doc.Root.XPathSelectElement("./extcode[@Type='abc']");
        Console.WriteLine("x:" + x.ToString());
XDocument xmlDoc = XDocument.Load(Server.MapPath("~/FolderName/FileName.xml"));
var output= from obj in xmlDoc.Element("extcode")
            where obj.Attribute("Type").Value.ToLower() == "abc"
            select obj;
DataTable outputTable = new DataTable();
outputTable.Columns.Add(new DataColumn("code"));
foreach (var item in output)
{
   DataRow outputRows = outputTable.NewRow();
   if (outputRows != null)
   {
      outputRows["Code"] = item.Element("code").Value;
   }
}
outputTable.Rows.Add(problemsRows);
outputTable.AcceptChanges();

现在我们有了输出数据表,您可以在任何需要的地方使用数据。

编辑我发现问题出在具有命名空间。XML文件如下aw:extcode而不仅仅是extcode和导致查询不起作用正确地我应该如何在命名空间的存在?

编写XPath表达式以应用于具有名称空间的XML文档是有关XPath的常见问题解答之一。

使用具有XmlNamespaceManager作为其第二个参数的XmlNode.SelectNodes()重载

第一个链接到页面有一个适合您的案例的完整代码示例。

其他方法是使用XPathNavigator.EEvaluate((XPathNavigator.Select((载,这些重载用作它们的第二个参数IXmlNamespaceResolver

使用LINQ,您可以使用Extensions.XPathEvaluate((方法。