xml - 如何使用Powershell读取o:xml?

标签 xml powershell openxml

我有以下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的需求很不方便,因为典型的用例是只关心XmlNodeGitHub suggestion #13669试图通过缓解疼痛-Raw开关可直接还原XmlNode实例。

  • 关于xml - 如何使用Powershell读取o:xml?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64699388/

    相关文章:

    powershell - 使用输出覆盖 Azure Function Table Store 行

    c# - 将图像内容从 Rest API 插入到 Microsoft Word 中当前打开的文档

    xml - 使用augeas修改centos的firewalld区域文件丢失缩进

    php - EDGAR .txt 文件的 HTML 渲染

    c# - 比较 2 个 XML 文档并将更改应用到源文档

    .net - 使用 XLINQ 解析 XHTML 文件的库

    powershell - 如何从通过 CMD 调用的 PowerShell Start-Process 启动的进程中获取 ErrorLevel?

    oracle - 无法在 Powershell 中使用加载的 Oracle.ManagedDataAccess 程序集

    c# - 以编程方式计算 DOCX 文档中具有特定样式的字符/单词/段落的数量

    excel - 使用 Excel 工作表作为模板与 OpenXML 中的 "real"Excel 模板