[英]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.