2015-10-14 84 views
0

我有一个在MS Project中创建的XML文件。这就像为:如何从C#中MS Project的XML文件中获取文本?

enter image description here

我想在“资源”节点,以获得UID值。我试试这个:

var xmlDoc = new XmlDocument(); 
     string strFileName = "Sample.xml"; 
     xmlDoc.Load(strFileName); 

     XmlNodeList xnList = xmlDoc.SelectNodes("/Project/Resources/Resource"); 
     foreach (XmlNode xn in xnList) 
     { 

      Console.WriteLine(xn["UID"].InnerText); 
     } 

然而,xmlDoc.SelectNodes( “/项目/资源/资源”);什么也没有返回。哪里不对?

+0

是'XML'文件是否正确装入?我会建议使用'LINQ to XML'。 – Sybren

+0

是的。这没有问题。 – 1teamsah

+0

资源没有InnerText。 UID的确如此。 – jdweng

回答

1

您必须添加命名空间:

var man = new XmlNamespaceManager(xmlDoc.NameTable); 
man.AddNamespace("ns", "http://schemas.microsoft.com/project"); 

XmlNodeList xnList = xmlDoc.SelectNodes("/ns:Project/ns:Resources/ns:Resource", man); 

此外,你可以做到这一点是:

var xnList = xmlDoc.SelectNodes("/ns:Project/ns:Resources/ns:Resource/ns:UID", man); 

foreach (XmlNode xn in xnList) 
{ 
    Console.WriteLine(xn.InnerText); 
} 
0

MSPDI不是一种愉快的XML格式。您可能会发现MPXJ的C#变体更易于提取数据。你会在NuGet上找到它!

+0

我试过了你的MPXJ库Jon。它总是会产生随机错误。它显示了不同的WBS和导入和导出之间的汇总。 –

相关问题