我遇到一个令人费解的情况,我正在访问XML的CDATA字符串。
我访问XML API并在PowerShell中收集CDATA字符串。它返回如下:
aggressorAllianceID: 99006227 aggressorCorpID: 244898283 aggressorID: 1283793762 armorValue: 1.0 hullValue: 1.0 moonID: 40043321 shieldValue: 0.5166110755741394 solarSystemID: 30000686 typeID: 20060
如您所见,有多行。我想将此收集到变量中,例如$aggressorAllianceID = 99006227
。
完整的XML就在这里:
<eveapi version="2">
<currentTime>2017-07-19 09:08:18</currentTime>
<result>
<rowset name="notifications" key="notificationID" columns="notificationID">
<row notificationID="644139237">
<![CDATA[
aggressorAllianceID: 99006227 aggressorCorpID: 244898283 aggressorID: 1283793762 armorValue: 1.0 hullValue: 1.0 moonID: 40043321 shieldValue: 0.5166110755741394 solarSystemID: 30000686 typeID: 20060
]]>
</row>
</rowset>
</result>
<cachedUntil>2027-07-17 09:08:18</cachedUntil>
</eveapi>
我尝试用split命令解析CDATA字符串,但我真的没有到达某个地方?
有人能举例说明他们如何访问和更改此CDATA信息吗?
答案 0 :(得分:4)
存储数据的规范方式是hashtable。使用ConvertFrom-StringData
cmdlet将字符串中的键=值对列表转换为哈希表数据结构。由于您的数据有冒号而不是=
,因此您需要先替换它们。
$cdata = @'
aggressorAllianceID: 99006227
aggressorCorpID: 244898283
aggressorID: 1283793762
armorValue: 1.0
hullValue: 1.0
moonID: 40043321
shieldValue: 0.5166110755741394
solarSystemID: 30000686
typeID: 20060
'@
$ht = $cdata -replace ':', '=' | ConvertFrom-StringData
然后您可以像这样访问各个值:
$ht['aggressorID']
$ht['hullValue']
...
答案 1 :(得分:0)
由于Tomalak的有用评论而取消删除 - 请在考虑New-Variable
之前阅读
Ansgar's answer是存储此数据并以编程方式处理此数据的更好方法。要回答关于如何获取的文字问题,例如$aggressorAllianceID = 99006227
,您可以使用New-Variable
input.txt中
aggressorAllianceID: 99006227
aggressorCorpID: 244898283
aggressorID: 1283793762
armorValue: 1.0
hullValue: 1.0
moonID: 40043321
shieldValue: 0.5166110755741394
solarSystemID: 30000686
typeID: 20060
$myReturnedValues = Get-content .\input.txt
foreach($line in $myReturnedValues){
New-Variable -Name ($line.Split(": "))[0] -Value ($line.Split(": "))[2]
}