Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用PowerShell在XML文件中获取CDATA中的值?_Xml_Powershell_Cdata - Fatal编程技术网

如何使用PowerShell在XML文件中获取CDATA中的值?

如何使用PowerShell在XML文件中获取CDATA中的值?,xml,powershell,cdata,Xml,Powershell,Cdata,我对正在访问的XML中的CDATA字符串感到困惑 我正在访问一个XML API并在PowerShell中收集CDATA字符串。它返回的结果如下: aggressorAllianceID: 99006227 aggressorCorpID: 244898283 aggressorID: 1283793762 armorValue: 1.0 hullValue: 1.0 moonID: 40043321 shieldValue: 0.5166110755741394 solarSystemID: 3

我对正在访问的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
$ht['aggressorID']
$ht['hullValue']
...
我试着用split命令解析CDATA字符串,但我并没有真正明白这一点


有人能给我举个例子,说明他们如何访问和改变CDATA信息吗?

像这样存储数据的标准方法是一种。使用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
然后,您可以像这样访问各个值:

aggressorAllianceID: 99006227 aggressorCorpID: 244898283 aggressorID: 1283793762 armorValue: 1.0 hullValue: 1.0 moonID: 40043321 shieldValue: 0.5166110755741394 solarSystemID: 30000686 typeID: 20060
$ht['aggressorID']
$ht['hullValue']
...
由于Tomalak的有用评论,未删除-请在考虑新变量之前阅读

是存储此数据并以编程方式处理此数据的更好方法。要回答如何获取的字面问题,例如$aggressorAllianceID=99006227,您可以使用

input.txt


让程序创建具有任意、不可预测名称的变量根本不是一个好主意。hashtable方法是一种可行的方法。@Tomalak在我的代码中,我使用newvariable和Get Variable结合起来,根据唯一的id存储和检索可预测的数据。完全承认数据存储是我的一个薄弱环节,在将来重构时将尝试使用Ansgar的方法。这种针对OP数据的方法是否如此糟糕,以至于可能造成伤害/导致进一步的问题,任何自修改代码以及在其运行的同一范围内创建变量的代码都是对攻击开放的SQL注入或跨站点脚本都是最突出的例子,或者在运行时随机中断,因为很容易覆盖现有变量。这将导致意外的程序行为。保持程序逻辑干净,防止注入漏洞。@Tomalak感谢您的解释。