在 Cake 构建中检索 XML 值?

Retrieving an XML value in Cake build?

是否有使用 Cake 构建自动化系统从文件中检索 XML 值的简单方法?

我一直在探索 Cake.Common.Xml namespace,但一切似乎都是为了修改 (XmlPoke) 或转换 (XmlTransformation) XML。这些方法的文档使它们看起来适合准备 XML 以便在以后的构建步骤中使用,因此它们不会 return 任何东西。

理想情况下,我只想进入一个带有 XPath 查询字符串的 FilePath 对象并获取结果值。

具体来说,我正在尝试从 Xamarin.Android 项目的 AndroidManifest.xml 中提取值,用于从 Cake.Xamarin 调用中命名生成的 APK,但似乎此功能应该处于 Cake.Common.Xml 级别。

您显然已经意识到(自您创建以来)有一个活跃的 Cake 拉取请求来添加此功能:

https://github.com/cake-build/cake/pull/641

一旦准备就绪,这个 Pull Request 将被拉入 Cake,并且该功能将在 Cake 中开箱即用。

截至 Cake v0.8.0, there is now XmlPeek from the Cake.Common.Xml.XmlPeekAliases namespace。您向它传递一个 FilePath 实例和一个 XPath 查询(带有诸如命名空间之类的可选设置),它将 return 一个字符串。

例如,给定一些像这样的本地 XML 文件……

<some>
    <nested>
        <thing someattribute="attributevalue" />
        <otherthing>some text value</otherthing>
    </nested>
</some>

例如,要获取属性值...

var attributeValue = XmlPeek(File("example.xml"),
    "/some/nested/thing/@someattribute")

...会给你一串 attributevalue.

并获取文本节点值…

var textNodeValue = XmlPeek(File("example.xml"),
    "/some/nested/otherthing/text()");

...会给你一串 some text value.