Powershell: How to use Format-Table with XML data详细说明了如何使用属性处理XML元素。我的情况就是这个变种。
在大多数情况下,不存在任何属性:
<content type="application/xml">
<m:properties>
<d:Title>Vivamus fermentum semper porta</d:Title>
可以使用此代码处理:
...
$properties = $xml.feed.entry.content.properties
$properties | Format-Table -Property @{Label="Title"; Expression={$_.Title}}
...
甚至:
$properties | Format-Table -Property Title
但是,在少数情况下,存在xml:space
属性:
<content type="application/xml">
<m:properties>
<d:Title xml:space="preserve">Lorem ipsum dolor sit amet </d:Title>
需要此代码:
...
$properties = $xml.feed.entry.content.properties
$properties | Format-Table -Property @{Label="Title"; Expression={$_.Title."#text"}}
...
有没有一种DRYer方法来处理这种情况?
答案 0 :(得分:0)
我最初想要提出一些更复杂的东西,但如果这符合你的需要,我不需要拔掉头发。我做了一个函数来检查传递的对象。如果该对象包含&#34; #text
&#34;属性然后我们返回它。否则只返回传递的对象。
function Get-XMLElementStringData{
param(
# In testing could be a string or System.Xml.XmlElement so I do not type this
$Element
)
# Check for the existence of the property. There are other methods but the result is the same.
# If($Element."#text"){$Element."#text"} would also work.
If($Element.PsObject.Properties.Name -contains "#text"){
$Element."#text"
} Else {
$Element
}
}
有了这个,我就能像这样改变你的输出代码:
$properties | Format-Table @{Label="Title"; Expression={Get-XMLElementStringData $_.Title}}
如果您正在寻找 DRYer 方式,那么我们可能会采用其他方法。