我正在尝试使用PowerShell中的select-xml
cmdlet来查询.NET项目中的一些XAML文件。以下是我尝试过的:
select-xml -content (cat $xaml_file_path) -xpath "//GroupBox"
其中$xaml_file_path
只是一个字符串,其中包含感兴趣的XAML文件的文件路径。
这将引发一个错误:
SELECT-XML:无法验证参数‘Content’上的参数。参数为Null、空,或者参数集合的某个元素包含Null值。请提供不包含任何null值的集合,然后重试该命令。
我知道XAML是有效的,因为它在Visual Studio上编译得很好。所以我在想,这里面可能有别的事情发生。
有没有办法使用PowerShell来查询XAML文件?如果是这样的话,是怎么做的?
2条答案
按热度按时间7gs2gvoe1#
要查询使用命名空间的XML(XAML)文档,
Select-Xml
要求您:[1]-Namespace
),声明您的XPath查询所涉及的所有命名空间**。xmlns
)的例外,也必须为其选择一个名称,但不能*为xmlns
(下面的示例使用_
)。-XPath
),包括DEFAULT(隐含)命名空间中的节点。一个简单的例子:
如果您想避免处理命名空间:
Select-Xml
的上下文中(以及基础的System.Xml.XmlDocument.SelectNodes()
.NET方法),避免处理命名空间的唯一方法是使用your own answer中所示的*[local-name()='...']
解决办法。[xml]
DOM**的上下文中,向[xml]
(System.Xml.XmlDocument
)的示例添加“虚拟”属性:.SelectNodes()
和.SelectSingleNode()
方法,但是,这同样需要名称空间管理。[1]命名空间管理的需要类似于直接使用底层的
System.Xml.XmlDocument.SelectNodes()
和System.Xml.XmlDocument.SelectSingleNodes()
.NET API,尽管构造前缀到URI的Map表有点麻烦-请参阅this answer。gcuhipw92#
我认为,类似于
xmllint
,可能有一个处理名称空间的issue。我发现以下方法确实有效:
如果有人知道一种更干净/更好的方法(即使用
-namespace
标志),我会很好奇。