我有以下xml文件,但不知道如何使用Powershell读取它,有人可以帮忙吗?谢谢!
我需要从Powershell获取url值。
<o:OfficeConfig xmlns:o="urn:xxx:xxx:xxx">
<o:services>
<o:service o:name="xxxx">
<o:url>https://xxx.xxx</o:url>
</o:service>
</o:services>
</o:OfficeConfig>
提前致谢!
最佳答案
您可以利用以下事实:PowerShell方便的,基于属性的adaptation of the XML DOM实际上会忽略 namespace ,从而使您可以通过不限定的元素名称简单地向下钻取感兴趣的元素:
([xml] (Get-Content -Raw file.xml)).OfficeConfig.services.service.url
相比之下,基于XPath的
Select-Xml
cmdlet是 namespace 感知的,因此需要显式的 namespace 处理-或通过local-name()
函数的解决方法,如Mathias R. Jessen's answer所示。如果要使用正确的 namespace 处理-最终会更健壮,但不一定总是必要的-请使用以下方法:
(
Select-Xml '//o:url' file.xml -Namespace @{ o='urn:schemas-microsoft-com:office:office' }
).Node.InnerText
@{ ... }
),该散列表声明使用的 namespace 前缀和URL,这是在XPath查询中能够使用前缀(在这种情况下为o:
)的前提。-Namespace
参数一致并映射到原始URL。 Select-Xml
返回匹配的 System.Xml.XmlNode
实例周围的包装对象,因此需要.Node
来访问后者,然后.InnerText
返回节点的文本内容。.Node
的需求很不方便,因为典型的用例是只关心XmlNode
。 GitHub suggestion #13669试图通过缓解疼痛-Raw
开关可直接还原XmlNode
实例。 关于xml - 如何使用Powershell读取o:xml?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64699388/