2013-02-23 4 views
1

Я хочу узнать имя ItemGroup, проанализировав приведенный ниже xml в dotnet C#. Я пробовал различные варианты, но не мог получить его. В принципе, я хочу знать, что есть ItemGroup, это может быть больше. В любом случае мы можем загрузить этот xml и получить список ItemsGroups и их имена.Получение коллекции ItemGroup и их элементов из MSBuild xml

Здесь я хочу имя ItemGroup как "cssfile_individual", cssfile_individual2

<Project xmlns="http://schemas.microsoft.com/developer/MsBuild/2003"> 

     <UsingTask TaskName="CssCompressorTask" AssemblyFile="Yahoo.Yui.Compressor.Build.MsBuild.dll" /> 
     <UsingTask TaskName="JavaScriptCompressorTask" AssemblyFile="Yahoo.Yui.Compressor.Build.MsBuild.dll" /> 

     <PropertyGroup> 

     </PropertyGroup> 

     <Target Name="Minify"> 

     <ItemGroup> 
      <cssfile_individual Include="test1.css"/> 
      <cssfile_individual Include="test2.css"/> 
      <cssfile_individual Include="test3.css"/> 
      <cssfile_individual Include="test3.css"/>  
     </ItemGroup> 

<ItemGroup> 
     <cssfile_individual2 Include="test1.css"/> 
     <cssfile_individual2 Include="test2.css"/> 
     <cssfile_individual2 Include="test3.css"/> 
     <cssfile_individual2 Include="test3.css"/>  
    </ItemGroup> 

     </Target> 
    </Project> 

Я попытался, как показано ниже

XmlDocument objXML = new XmlDocument(); 
      objXML.Load(path); 

, а затем начал получать Чайлдс и все.

Пример XML выглядит следующим образом

<?xml version="1.0" encoding="utf-8"?> 
<Project xmlns="http://schemas.microsoft.com/developer/MsBuild/2003"> 
    <UsingTask TaskName="CompressorTask" 
      AssemblyFile="D:\JsCssCompressor\JsCssCompressor\bin\Yahoo.Yui.Compressor.Build.MsBuild.dll" /> 

    <Target Name="MyTaskTarget"> 
    <ItemGroup> 
     <JavaScriptFiles Include="C:\Work\Purchase_Flow\eBizSol_App\Release\WebSites\Websites\McAfee.Consumer.Website\UIDesign\LegacySite\Scripts\FlexDashboard\AddDevice.js"/> 
    </ItemGroup> 
    <CompressorTask 
     JavaScriptCompressionType="YuiStockCompression" 
     JavaScriptFiles="@(JavaScriptFiles)" 
     ObfuscateJavaScript="True" 
     PreserveAllSemicolons="False" 
     DisableOptimizations="Nope" 
     EncodingType="Default" 
     DeleteJavaScriptFiles="false" 
     LineBreakPosition="-1" 
     JavaScriptOutputFile="C:\Work\Purchase_Flow\eBizSol_App\Release\WebSites\Websites\McAfee.Consumer.Website\UIDesign\LegacySite\Scripts\FlexDashboard\MAA2.0.js" 
     LoggingType="ALittleBit" 
     ThreadCulture="en-us" 
     IsEvalIgnored="false" 
      /> 
    </Target> 
</Project> 

ответ

1

Использование LINQ для XML

XDocument objXML = new XDocument(); 
objXML.Load(path); 

Ваш код LINQ будет выглядеть как этот

var ItemGroups = from IG in objXML.Descendants("ItemGroup") 
       select new { 
        Children = LG.Descendants() 
       }; 

//Print Results 
string str = ""; 

foreach (var IG in ItemGroups){ 
    str += "Item Group Name: " + IG.Children[0].Name + Environment.NewLine; 
    foreach (var IGValue in IG.Children){ 
    str += " " + IGValue.Attribute("Include").Value + Environment.NewLine; 
    } 
} 

Список литературы

Update

Вот пример приложения.

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Xml.Linq; 

namespace testapp_xdocument_linq 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 

      XNamespace ns = "http://schemas.microsoft.com/developer/msbuild/2003"; 
      XDocument X = XDocument.Load("C:\\Users\\Brian\\Documents\\Visual Studio 2012\\Projects\\testapp_xdocument_linq\\testapp_xdocument_linq\\testapp_xdocument_linq.csproj"); 

      var PropertyGroups = from PG in X.Descendants(ns + "PropertyGroup") select PG; 

      //Print Results 
      foreach (var element in PropertyGroups) 
      { 
       Console.WriteLine("First Descendant Name: " + element.Descendants().First().Name + Environment.NewLine); 
      } 

      Console.ReadLine(); 
     } 
    } 
} 

Это новое приложение для консоли C#. Я загружаю собственный файл .csproj проекта.

Я не могу выполнить этот код против вашего образца XML. Я подозреваю, что это происходит потому, что он нарушает схему, определенную http://schemas.microsoft.com/developer/msbuild/2003.

+0

Брайан, спасибо большое, я постараюсь это и обновить вас – kobe

+0

как-то я не получаю ItemGroups – kobe

+0

XMLDocument не имеет метода называют потомками, поэтому я изменил его на XDocument, – kobe

Смежные вопросы