我想知道是否可以通过传递来自父母来阅读孩子。
<configuration>
<Server>
<RootDirectory>Temp</RootDirectory>
<IP>192.168.10.10</IP>
<Port>350</Port>
<UserName>USERNAME</UserName>
<UserPassword>PASSWORD</UserPassword>
</Server>
</configuration>
我将用“
”读取节点“Server”<MSBuild.ExtensionPack.Xml.XmlFile TaskAction="ReadElements" File="server.config" XPath="//configuration/Server">
<Output TaskParameter="Elements" ItemName="Server" />
</MSBuild.ExtensionPack.Xml.XmlFile>
我想用这样的东西显示所有子节点:
<Message Text="%(Server.RootDirectory) - %(Server.IP)"/>
有什么想法吗?
答案 0 :(得分:0)
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="AllTargetsWrapped">
<Target Name="AllTargetsWrapped">
<CallTarget Targets="ReadXmlPeekValue" />
<CallTarget Targets="ParseIndividualXmls" />
</Target>
<Target Name="ReadXmlPeekValue">
<!-- you do not need a namespace for this example, but I left it in for future reference -->
<XmlPeek Namespaces="<Namespace Prefix='peanutNamespace' Uri='http://schemas.microsoft.com/developer/msbuild/2003'/>"
XmlInputPath=".\Parameters.xml"
Query="/configuration/Server">
<Output TaskParameter="Result" ItemName="Peeked" />
</XmlPeek>
<Message Text="@(Peeked)"/>
</Target>
<Target Name="ParseIndividualXmls" Outputs="%(Peeked.Identity)">
<!-- See http://sstjean.blogspot.com/2006/09/how-to-get-msbuild-to-run-complete.html -->
<PropertyGroup>
<MyXmlSnipplet>%(Peeked.Identity)</MyXmlSnipplet>
</PropertyGroup>
<!--
<Message Text=" MyXmlSnipplet = $(MyXmlSnipplet) "/>
-->
<XmlPeek Namespaces="<Namespace Prefix='peanutNamespace' Uri='http://schemas.microsoft.com/developer/msbuild/2003'/>"
XmlContent="$(MyXmlSnipplet)"
Query="/Server/RootDirectory[1]/text()">
<Output TaskParameter="Result" PropertyName="MyRootDirectory" />
</XmlPeek>
<Message Text=" MyRootDirectory = $(MyRootDirectory) "/>
<XmlPeek Namespaces="<Namespace Prefix='peanutNamespace' Uri='http://schemas.microsoft.com/developer/msbuild/2003'/>"
XmlContent="$(MyXmlSnipplet)"
Query="/Server/IP[1]/text()">
<Output TaskParameter="Result" PropertyName="MyIP" />
</XmlPeek>
<Message Text=" MyIP = $(MyIP) "/>
</Target>
<!--
<configuration>
<Server>
<RootDirectory>Temp</RootDirectory>
<IP>192.168.10.10</IP>
<Port>350</Port>
<UserName>USERNAME</UserName>
<UserPassword>PASSWORD</UserPassword>
</Server>
<Server>
<RootDirectory>Poopty</RootDirectory>
<IP>10.0.1.444</IP>
<Port>333</Port>
<UserName>Scott</UserName>
<UserPassword>Tiger</UserPassword>
</Server>
</configuration>
-->
</Project>
答案 1 :(得分:0)
最后,在Mike Fourie(Solution)的帮助下,有一个解决方案。
您需要下载最新的源代码,编译.sln并将二进制文件复制到您的文件夹c:\ Program Files \ Msbuild \ ExtensionPack以使用属性“ReadChildrenToMetadata”,如下所示:
<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)"/>
你会得到:
Temp - 192.168.10.10