Search code examples
xmlmsbuildmsbuildextensionpack

How to read child from parent node? MsBuild


I would like to know if it's possible to read a child by passing from the parent.

<configuration>

    <Server>
        <RootDirectory>Temp</RootDirectory>
        <IP>192.168.10.10</IP>
        <Port>350</Port>
        <UserName>USERNAME</UserName>
        <UserPassword>PASSWORD</UserPassword>       
    </Server>

</configuration>

I will read the node "Server" with:

<MSBuild.ExtensionPack.Xml.XmlFile TaskAction="ReadElements" File="server.config" XPath="//configuration/Server">
            <Output TaskParameter="Elements" ItemName="Server" />
</MSBuild.ExtensionPack.Xml.XmlFile>

And I would like to display all child nodes with something like this:

<Message Text="%(Server.RootDirectory) - %(Server.IP)"/>

Any ideas?


Solution

  • Finally, with the help of Mike Fourie (Solution), there is a solution.

    You need to download the latest source code, compile the .sln and copy binaries to your folder c:\Program Files\Msbuild\ExtensionPack to use the property "ReadChildrenToMetadata" like that:

    <configuration>
    
        <Server>
            <RootDirectory>Temp</RootDirectory>
            <IP>192.168.10.10</IP>
            <Port>350</Port>
            <UserName>USERNAME</UserName>
            <UserPassword>PASSWORD</UserPassword>       
        </Server>
    
    </configuration>
    

    ReadElements:

    <MSBuild.ExtensionPack.Xml.XmlFile TaskAction="ReadElements" ReadChildrenToMetadata="true" File="Config\ftp.config" XPath="//configuration/Server">
                <Output TaskParameter="Elements" ItemName="Server" />
    </MSBuild.ExtensionPack.Xml.XmlFile>
    
    <Message Text="%(Server.RootDirectory) - %(Server.IP)"/>
    

    And you will get:

    Temp - 192.168.10.10