在C#中使用XPath表达式读取XML文件

时间:2018-12-28 11:20:01

标签: c# xml xpath xmldocument

我目前在使用XPath表达式读取XML文件时遇到问题。我使用了XMLdocument类。当我尝试从XML读取特定节点时,我得到一个空列表。我尝试读取的节点是ProductionRequest下面的ID。

这是我尝试读取的XML文件:

<?xml version="1.0" encoding="iso-8859-1"?>
<ProductionSchedule xmlns="http://www.wbf.org/xml/b2mml-v02"> 
  <ID>00000020000000</ID>
  <Location>
   <EquipmentID>8283</EquipmentID>
   <EquipmentElementLevel>Site</EquipmentElementLevel>
  <Location>
   <EquipmentID>0</EquipmentID>
   <EquipmentElementLevel>Area</EquipmentElementLevel>
   </Location>
  </Location>
 <ProductionRequest>
    <ID>0009300000000</ID>
    <ProductProductionRuleID>W001</ProductProductionRuleID>
    <StartTime>2017-04-20T23:57:20</StartTime>
    <EndTime>2017-04-20T24:00:00</EndTime>
    </ProductionRequest>
  </ProductionSchedule>

这是我用来阅读上述XML的代码

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

namespace XML
{
  class Program
  {
    static void Main(string[] args)
    {
     Console.WriteLine("Hello World!");
     string fullName = "F:\\Programming\\XML\\Example XML.xml";
     XmlDocument xreader = new XmlDocument();

     xreader.Load(fullName);
     XmlNode root = xreader.DocumentElement;
     XmlNodeList xnList1 = 
            xreader.SelectNodes("/ProductionSchedule/ProductionRequest/ID");


    }
  }
 }

我找不到导致此问题的原因。在这方面,谁能帮助我。期待有价值的投入。

1 个答案:

答案 0 :(得分:0)

您的xml在根级节点CONNECT TO EMP; CREATE TABLE DIGIT.DOC_MAST1_2030 ( DOC_CODE_2030 CHARACTER (6) NOT NULL , DOC_NAME_2030 CHARACTER (75) , DOC_TLOC_2030 CHARACTER (1) , DOC_PLOC_2030 CHARACTER (75) , DOC_DLOC_2030 CHARACTER (75) ) ; CONNECT RESET; 上包含名称空间http://www.wbf.org/xml/b2mml-v02

您正在使用<ProductionSchedule>这种XPath,但是这些路径不适用于此xml,这就是为什么您无法获得任何期望值的原因。

您需要使用XPath下面的内容来获取所有/ProductionSchedule/ProductionRequest/ID节点的ID。

<ProductionRequest>

或者您可以手动添加名称空间,例如

XmlNodeList xnList1 = xreader.SelectNodes("//*[name()='ProductionSchedule']/*[name()='ProductionRequest']/*[name()='ID']");

最后,您可以从变量XmlNamespaceManager nsmgr = new XmlNamespaceManager(xreader.NameTable); nsmgr.AddNamespace("x", "http://www.wbf.org/xml/b2mml-v02"); XmlNodeList xnList1 = xreader.SelectNodes("//x:ProductionSchedule/x:ProductionRequest/x:ID", nsmgr); 以上的任何人中读取id,例如

xnList1

输出:

enter image description here