繁体   English   中英

使用 Powershell 从 XML 文件中读取

[英]Read from XML file using Powershell

我发现很难找到从 XML 文件中检索内容的方法。 下面是我的 xml 文件的样子。 我正在尝试检索完整的“nlog”节点。 请帮忙。

<configuration>
<configSections>
        <section name="nlog" type="NLog.Config.ConfigSectionHandler, ..."/>
 </configSections>
  <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <variable name="LoggingDirectory" value="D:/Logging/"/>
      <include file="${LoggingDirectory}Config/Framework.nlog.xml"/>
  </nlog>
 </configuration>

这是我迄今为止尝试过的:

$nlogConfigFile = 'D:\machine.config.nlog.xml'
$nlogConfigXml = new-object xml
$nlogConfigXml.Load($nlogConfigFile);
$nlogConfigXml.PreserveWhitespace = $true

我使用了此博客http://blog.danskingdom.com/powershell-functions-to-get-an-xml-node-and-get-and-set-an-xml- 中提供的“Get-XmlNode”功能元素值甚至当元素不存在时/

Get-XmlNode -XmlDocument $nlogConfigXml -NodePath "configuration.configSections.section[@name='nlog']"     ## works OK
Get-XmlNode -XmlDocument $nlogConfigXml -NodePath "configuration.nlog"   ## does NOT work

我也试过 "Select-Xml" , .SelectSingleNode 命令,但它们似乎都不起作用。 如果我遗漏了什么,请告诉我。

这有效:

$nlogConfigXml = [xml]$(gc "D:\machine.config.nlog.xml")

然后您可以使用对象表示法导航$nlogConfigXml

例如,这样做:

$nlogConfigXml.configuration.nlog.variable.name

...输出这个:

LoggingDirectory

我建议使用 Select-Xml 和 XPath。 请注意,您需要包含名称空间信息才能使其正常工作:

$Xml = [xml]@'
<configuration>
<configSections>
        <section name="nlog" type="NLog.Config.ConfigSectionHandler, ..."/>
 </configSections>
  <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <variable name="LoggingDirectory" value="D:/Logging/"/>
      <include file="${LoggingDirectory}Config/Framework.nlog.xml"/>
  </nlog>
</configuration>
'@

Select-Xml -Xml $Xml -Namespace @{
    n = "http://www.nlog-project.org/schemas/NLog.xsd"
} -XPath //n:nlog

命名空间定义(哈希表值)只是xmlns复制/粘贴。 您指定的名称(哈希表键)与您稍后必须在 XPath 查询中用作 XPath 元素的前缀相同(例如: n:nlog

$nlogConfigFile = '.\machine.config.nlog.xml'
[XML]$xmlFileContent = Get-Content $nlogConfigFile
$xmlFileContent.configuration.nlog.variable.name

与之前的答案格式略有不同。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM