不忽略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我预期的结果。
这不是一个错误。
要忽略命名空间,您可以使用命名空间不可知的 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)
但是要小心包含大量元素的文档 - 这可能会变得非常慢。
| 归档时间: |
|
| 查看次数: |
63 次 |
| 最近记录: |