[英]PowerShell - Parse string that is XML
我正在运行 SQL 查询,返回的字段之一包含格式为 XML 的字符串。 返回的字符串是包含所有元素的一行,我添加了回车符以提高可读性。 我尝试使用“convertto-xml”将字符串转换为 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>
"
我用过: $Newstring = $string | 转换为 xml
获取 XML 对象。 如何处理参数值“TO”? 点寻址似乎不起作用
正如vonPryz评论的那样,您可以使用[xml]
类型加速器将字符串读取为 XML。
然后很容易得到你想要的值:
[xml]$xml = $string
$to = ($xml.ParameterValues.ParameterValue | Where-Object { $_.Name -eq 'TO' }).Value -split ';'
$to
结果:
Address1@domain.com
address2@domain.com
与@Theo 的好答案类似,有几种方法可以获取数据,但它们都植根于 [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
使用.Where()
方法的略短版本:
#...
( $String.ParameterValues.ParameterValue).Where( { $_.Name -eq 'TO' } ).Value
特定的 XML 结构使这有点令人困惑。 在每个 ParameterValue 元素内部本质上是一个 Name/Value 对,它在概念上看起来很像一个字典对象。 因此,如果您必须超越仅获取一个值,也许您实际上可以转换为字典; 就像是:
$Hash = @{}
$String.ParameterValues.ParameterValue |
ForEach-Object{
$Hash.Add( $_.Name, $_.Value )
}
$Hash.To
$Hash.Subject
$Hash.Comment
# ...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.