如何在PowerShell中编写Xml.linq?

时间:2012-05-21 11:24:11

标签: xml powershell linq-to-xml

我正在尝试在powershell中执行此操作:

XDocument document = XDocument.Load(@"web.config");

var comments = document.Descendants("client").DescendantNodes().OfType<XComment>().ToArray();

foreach (var comment in comments)
{
    XElement unCommented = XElement.Parse(comment.Value);
    comment.ReplaceWith(unCommented);
}

我尝试过这样的事情:

$xDoc = [System.Xml.Linq.XDocument]::Load("web.config")

[System.Collections.Generic.IEnumerable[System.Xml.Linq.XElement]] $enum = $xDoc.Descendants("client")

$clients = [System.Xml.Linq.Extensions]::DescendantNodes($enum)

但是我收到一条错误说“异常调用带有1个参数的DescendantNodes:value不能为null”

2 个答案:

答案 0 :(得分:18)

我使用了powershell中的linq来解决这个问题(从xml文档中取消注释):

    [Reflection.Assembly]::LoadWithPartialName("System.Xml.Linq") | Out-Null

    $xDoc = [System.Xml.Linq.XDocument]::Load("web.config")
    $endpoints = $xDoc.Descendants("client") | foreach { $_.DescendantNodes()}               
    $comments = $endpoints | Where-Object { $_.NodeType -eq [System.Xml.XmlNodeType]::Comment -and $_.Value -match "net.tcp://localhost:9876/RaceDayService" }        
    $comments | foreach { $_.ReplaceWith([System.Xml.Linq.XElement]::Parse($_.Value)) }

    $xDoc.Save("web.config")

答案 1 :(得分:0)

如果您要编写PowerShell Modules,则需要创建一个Manifest文件,该文件在Import-Module MyModule调用时会加载类似的依赖项:

# Comma-separated assemblies that must be loaded prior to importing this module
RequiredAssemblies = @("System.Xml.Linq")

这是编写模块的人的推荐方法。