1

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」関数を使用しましたhttp://blog.danskingdom.com/powershell-functions-to-get-an-xml-node-and-get-and-set-an-xml-要素が存在しない場合でも、要素の値/

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 コマンドも試しましたが、どれも機能していないようです。何か不足している場合はお知らせください。

4

3 に答える 3

4

これは機能します:

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

$nlogConfigXmlその後、オブジェクト表記を使用してナビゲートできます。

たとえば、次のようにします。

$nlogConfigXml.configuration.nlog.variable.name

...これを出力します:

LoggingDirectory
于 2013-12-31T06:53:38.227 に答える
0
$nlogConfigFile = '.\machine.config.nlog.xml'
[XML]$xmlFileContent = Get-Content $nlogConfigFile
$xmlFileContent.configuration.nlog.variable.name

前の回答とは少し形式が異なります。

于 2021-06-01T10:39:22.820 に答える
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) 。

于 2013-12-31T17:07:55.670 に答える