【问题标题】:Cannot set "ExternalId" because only strings can be used as values to set XmlNode properties无法设置“ExternalId”,因为只有字符串可以用作设置 XmlNode 属性的值
【发布时间】:2018-04-27 03:04:28
【问题描述】:

我正在尝试使用 PowerShell 将 .CSV 文件转换为 .XML 文件。

这是我的代码:

[xml]$xml = "
<Cv>
<Owner>
    <ExternalId></ExternalId>
    <Name></Name>
</Owner>
<Content>
   <Educations>
   </Educations>
</Content>
</Cv>"

$basePath= "C:\Users\test\source\CERTSUMMARY.CSV"
$targetBase = "C:\Users\test\source\target"

$sert = Import-CSV $basePath -Delimiter ';'

foreach ($person in $sert) {
    $xml2 = $xml.Clone()
    $xml2.Cv.Owner.ExternalId = $person.Användarnamn
    $xml2.Cv.Owner.Name = $person.Namn

我在这里寻找答案并尝试了其他开发人员所说的建议。我试过把[string]$person.Användarnamn,我试过$xml2.Cv.Owner.ExternalId.ToString(),我也试过改变CSV文件中的值,但没有任何结果。

错误信息如主题所说:

“无法设置“ExternalId”,因为只有字符串可以用作设置 XmlNode 属性的值。”

【问题讨论】:

    标签: xml powershell csv


    【解决方案1】:

    您很可能在那里遇到了编码问题。您的列标题包含一个未在 ASCII 中定义的特殊字符 (ä)(默认使用编码 Import-Csv),因此该属性很可能显示为 Anv?ndarnamn(您可以通过回显 $sert[0] 来验证)。在这种情况下,导入的对象没有属性Användarnamn。由于 PowerShell 将不存在的属性扩展为 $null 声明

    $xml2.Cv.Owner.ExternalId = $person.Användarnamn
    

    会尝试将$null 分配给XML 节点,但不起作用。

    尝试使用Default 编码导入文件:

    $sert = Import-Csv $basePath -Delimiter ';' -Encoding Default
    

    如果这没有帮助,您可能需要将 CSV 保存为支持特殊字符的格式(例如 UTF8)。

    【讨论】:

    • 您好 Ansgar,我已经尝试了您上面的所有建议,但问题仍然存在。但感谢您的回复:) 问候,
    • 如需进一步帮助,请使用示例输入更新您的问题。
    • 我已使用 .CSV 文件和该列中的一些数据以及 .PS1 文件中的代码示例进行了更新。我将“Användarnamn”更改为“用户名”,但仍然收到相同的错误消息。是否还要在 PS 中发布错误图片?
    • 请显示实际的 CSV 数据,而不是在 Excel 中导入后的屏幕截图。 CSV 只是结构化的纯文本,因此您可以在任何编辑器中打开文件。
    • 现在链接了一张照片@Ansgar Wiechers
    【解决方案2】:

    尝试使用 .InnerText 引用您的 null xml 元素

    foreach ($person in $sert) {
    $xml2 = $xml.Clone()
    $xml2.Cv.Owner.ExternalId.InnerText = $person.Användarnamn
    $xml2.Cv.Owner.Name.InnerText = $person.Namn
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-08
      • 1970-01-01
      • 2022-09-29
      • 2021-07-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多