PowerShell-解析XML格式的字符串

PowerShell-解析XML格式的字符串,xml,powershell,Xml,Powershell,我正在运行一个SQL查询,返回的一个字段包含一个格式化为XML的字符串。返回的字符串是包含所有元素的单行,为了可读性,我添加了回车。我曾尝试使用“converttoxml”将字符串转换为XML,它似乎创建了一个XML对象,但我似乎无法解析它。我承认我在处理XML方面是个新手,但我似乎无法解析对象。我特别尝试查找名为“to”的参数的值。我试图寻找“childnodes”和“innertext”,但无法枚举元素。我甚至不确定在转换之后,这些是元素还是属性 以下是字符串: $String = &quo

我正在运行一个SQL查询,返回的一个字段包含一个格式化为XML的字符串。返回的字符串是包含所有元素的单行,为了可读性,我添加了回车。我曾尝试使用“converttoxml”将字符串转换为XML,它似乎创建了一个XML对象,但我似乎无法解析它。我承认我在处理XML方面是个新手,但我似乎无法解析对象。我特别尝试查找名为“to”的参数的值。我试图寻找“childnodes”和“innertext”,但无法枚举元素。我甚至不确定在转换之后,这些是元素还是属性

以下是字符串:

$String = "
<ParameterValues>
    <ParameterValue>
        <Name>TO</Name>
        <Value>Address1@domain.com;address2@domain.com</Value>
    </ParameterValue>
    <ParameterValue>
        <Name>Subject</Name>
        <Value>Emailsubject</Value>
    </ParameterValue>
    <ParameterValue>
        <Name>Comment</Name>
        <Value>ReportComment</Value>
    </ParameterValue>
    <ParameterValue>
        <Name>RenderFormat</Name>
        <Value>MHTML</Value>
    </ParameterValue>
    <ParameterValue>
        <Name>Priority</Name>
        <Value>Normal</Value>
    </ParameterValue>
    <ParameterValue>
        <Name>IncludeLink</Name>
        <Value>true</Value>
    </ParameterValue>
    <ParameterValue>
        <Name>IncludeReport</Name>
        <Value>true</Value>
    </ParameterValue>
</ParameterValues>
"
$String=”
到
Address1@domain.com;address2@domain.com
主题
电子邮件主题
评论
报告评论
渲染格式
MHTML
优先
正常的
IncludeLink
真的
包括报告
真的
"
我用过: $Newstring=$string |转换为xml

获取XML对象。如何将参数值“TO”寻址?点寻址似乎不起作用

如前所述,您可以使用
[xml]
类型Accelerator将字符串读取为xml

然后很容易获得您所寻求的值:

[xml]$xml = $string
$to = ($xml.ParameterValues.ParameterValue | Where-Object { $_.Name -eq 'TO' }).Value -split ';'
$to
结果:

Address1@domain.com
address2@domain.com
与此类似,有几种获取数据的方法,但它们都植根于[XML]类型加速器

$String = "
<ParameterValues>
    <ParameterValue>
        <Name>TO</Name>
        <Value>Address1@domain.com;address2@domain.com</Value>
    </ParameterValue>
    <ParameterValue>
        <Name>Subject</Name>
        <Value>Emailsubject</Value>
    </ParameterValue>
    <ParameterValue>
        <Name>Comment</Name>
        <Value>ReportComment</Value>
    </ParameterValue>
    <ParameterValue>
        <Name>RenderFormat</Name>
        <Value>MHTML</Value>
    </ParameterValue>
    <ParameterValue>
        <Name>Priority</Name>
        <Value>Normal</Value>
    </ParameterValue>
    <ParameterValue>
        <Name>IncludeLink</Name>
        <Value>true</Value>
    </ParameterValue>
    <ParameterValue>
        <Name>IncludeReport</Name>
        <Value>true</Value>
    </ParameterValue>
</ParameterValues>
"

$String = [XML]$String

( $String.ParameterValues.ParameterValue | 
Where-Object{ $_.Name -eq 'TO' } ).Value
特定的XML结构使这有点混乱。在每个ParameterValue元素中,本质上是一个名称/值对,在概念上看起来很像字典对象。因此,如果你必须超越仅仅获得一个值,也许你实际上可以转换成字典;比如:

$Hash = @{}
$String.ParameterValues.ParameterValue |
ForEach-Object{
    $Hash.Add( $_.Name, $_.Value )
}

$Hash.To
$Hash.Subject
$Hash.Comment
# ...

用于将.Net对象转换为XML表示形式。用acclarator类型将对象转换为XML:
[XML]$x=$string
啊,好吧,我没有想到将其转换为XML对象,我假设“converttoxml”可以做到这一点。谢谢@音乐人,不客气。请点击✓ 如果您发现它解决了您的问题,请单击左侧的图标。
$Hash = @{}
$String.ParameterValues.ParameterValue |
ForEach-Object{
    $Hash.Add( $_.Name, $_.Value )
}

$Hash.To
$Hash.Subject
$Hash.Comment
# ...