Cake PeekXml不会“忽略”命名空间

Los*_*nos 5 cakebuild

不忽略xmlns属性是bug还是每个设计?

(蛋糕版本0.33.0)


使用这样的Xml(过于简化的nuspec文件):

<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
    <metadata>
        <!-- Continuously updated elements -->
        <version>3.0.0</version>
    </metadata>
</package>
Run Code Online (Sandbox Code Playgroud)

我天真地打个招呼就 var x = XmlPeek( "my.nuspec", "/package/metadata/version/text()" );
得到了结果x==null

所以我这样指定名称空间:

var settings = new XmlPeekSettings{
    Namespaces = new Dictionary<string, string> {{ 
        "ps", "http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd" 
    }}
};
var x = XmlPeek( "my.nuspec", "/ps:package/ps:metadata/ps:version/text()", settings);
Run Code Online (Sandbox Code Playgroud)

并得到x==3.0.0我预期的结果。

Rom*_*syk 5

这不是一个错误。

要忽略命名空间,您可以使用命名空间不可知的 xpath,例如local-name()

var x = XmlPeek( "my.nuspec", "/*[local-name() = 'package']/*[local-name() = 'metadata']/*[local-name() = 'version']/text()");
Run Code Online (Sandbox Code Playgroud)

或者如果您只有一个version节点:

var x = XmlPeek( "my.nuspec", "//*[local-name()='version']/text()");
Run Code Online (Sandbox Code Playgroud)

但是要小心包含大量元素的文档 - 这可能会变得非常慢。