我发现很难找到从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
中提供的“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命令,但它们似乎都没有用。 如果我遗失了什么,请告诉我。
答案 0 :(得分:2)
这有效:
$nlogConfigXml = [xml]$(gc "D:\machine.config.nlog.xml")
然后,您可以使用对象表示法导航$nlogConfigXml
。
例如,执行此操作:
$nlogConfigXml.configuration.nlog.variable.name
...输出:
LoggingDirectory
答案 1 :(得分:0)
我建议使用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
)
答案 2 :(得分:0)
$nlogConfigFile = '.\machine.config.nlog.xml'
[XML]$xmlFileContent = Get-Content $nlogConfigFile
$xmlFileContent.configuration.nlog.variable.name
与之前的答案格式略有不同。