Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.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
如果其他Node.InnerText与哈希表键匹配,则将XML节点的InnerText设置为哈希表值_Xml_Powershell_Selectsinglenode_Selectnodes - Fatal编程技术网

如果其他Node.InnerText与哈希表键匹配,则将XML节点的InnerText设置为哈希表值

如果其他Node.InnerText与哈希表键匹配,则将XML节点的InnerText设置为哈希表值,xml,powershell,selectsinglenode,selectnodes,Xml,Powershell,Selectsinglenode,Selectnodes,如标题所述,如果hashtable键与另一个XML节点的InnerText匹配,我想将新ChildNode的InnerText设置为等于hashtable值 XML示例: 正如您在脚本中看到的,我正在为每个$nodes=$xml.SelectNodes('.//alternativeExportValues')创建一个childnode。 在这里,我希望$newNode.InnerText与$scaleName=$xml.SelectSingleNode('.//name[@id=“0”]')

如标题所述,如果hashtable键与另一个XML节点的InnerText匹配,我想将新ChildNode的InnerText设置为等于hashtable值

XML示例:
正如您在脚本中看到的,我正在为每个
$nodes=$xml.SelectNodes('.//alternativeExportValues')
创建一个childnode。 在这里,我希望
$newNode.InnerText
$scaleName=$xml.SelectSingleNode('.//name[@id=“0”]')的InnerText匹配时,它是相应哈希表键的哈希表值

一直在尝试使用
foreach($exportValue.Keys中的key)
foreach($exportValue.GetEnumerator()中的kvp)
,但如果运气不好,脚本基本上会永远运行


任何正确方向的帮助或指导都将不胜感激。

我试图提供一个一般性的答案,但需要更多信息

  • 在提交关于XML导航的问题时,请包含一个XML示例,其中至少包含两个您所针对的类型的节点。在本例中,我们可能需要//scales/scale和//names/name的上下文。包含几行.csv数据可能会有所帮助

  • 这种说法可能行不通:

  • 但也许你只是想让它成为你寻求帮助的逻辑的占位符。请澄清或偏移该文本以显示其文字

  • 我将尝试用给出的信息回答您的问题。:) 您正在正确地创建元素,但看起来可能需要收紧上下文。试着这样做:

    $newNode.InnerText = $exportValue[$($scalename.InnerText)]
    
    但是,请确保您位于xml中正确的上下文节点,以便对其进行比较,并确保它们完全匹配。如果是这样,您应该能够使用该InnerText作为$exportValue哈希表的索引


    很多猜测。更多信息将有所帮助。:)

    您好@adamt8,我已经用一个XML和.csv文件的例子更新了这个问题。引用[$($scaleName.InnerText)]会使用所有值更新节点的InnerText(895)。希望编辑能进一步解释这个问题。你有没有发现这个问题?@Blaisem我用Python而不是Powershell实现了它。
    navn;altValue
    Some Text;0001
    Some Text 2;0002
    
    # Hashtable containing scale name & alt exp value (key : value)
    $exportValue = @{ }
    
    # Import .csv file holding the data
    $scaleData = Import-Csv -Path '.\myCsvFile.csv' -Delimiter ';' -Encoding UTF8 |
    % {
      $exportValue[$_.navn] = $_.altValue
    }
    
    # scales & list XML
    $xmlFile = '.\myXmlFile.xml'
    [Xml]$xml = Get-Content $xmlFile -Encoding UTF8
    
    # xPath
    $scaleName = $xml.SelectNodes('.//name[@id="0"]')
    
    # Create child node to alternativeExportValues
    $nodes = $xml.SelectNodes('.//alternativeExportValues') | ForEach-Object {
      $newNode = $xml.CreateElement('alternativeExportValue')
      $newNode.SetAttribute("id", "0")
      $newNode.InnerText = "{{key value}}"
      $_.AppendChild($newNode)
    }
    
    $xml.Save('.\Result.xml')
    
    $newNode.InnerText = '$exportValue.value if $exportValue.key matches InnerText of $scaleName'
    
    $newNode.InnerText = $exportValue[$($scalename.InnerText)]