如何提取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。
使用此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((方法。