需要帮助在XML FILE中插入子节点

曼尼斯·库玛(Manish Kumar)

在PowerShell中需要帮助以更正XML文件。我要在此处插入的节点不是XML文件的第一个子节点。当前文件的结构-这是当前文件,对此我需要帮助

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<Shipment xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" >
    <ShipmentNumber>0012546776</ShipmentNumber>
    <Container>Selleys/Yates</Container>
    <Extnl_id/>
    <AddressForwardingAgent>
        <PartnerNumber>0000400260</PartnerNumber>
        <LanguageKey>EN</LanguageKey>
        <Name>TEST</Name>
        <HouseandStreet>TEST1</HouseandStreet>
        </AddressForwardingAgent>
    <AddressSender>
        <TransportPlanningPoint>4001</TransportPlanningPoint>
        <LanguageKey>EN</LanguageKey>
        <Name>TEST2</Name>
        <HouseandStreet>TEST2</HouseandStreet>
    </AddressSender>
    <Consignment>
        <ConsignmentNumber>0001</ConsignmentNumber>
        <ConsignmentHeader>
            <DangerousGoodsIndicator>X</DangerousGoodsIndicator>
            <GrossWeight>2005.268</GrossWeight>
            <WeightUOM>KG</WeightUOM>
            <TotalVolume>3.856</TotalVolume>
            <VolumeUOM>M3</VolumeUOM>
        </ConsignmentHeader>
        <ConsignmentNumber>0002</ConsignmentNumber>
        <ConsignmentHeader>
            <DangerousGoodsIndicator>X</DangerousGoodsIndicator>
            <GrossWeight>21.12</GrossWeight>
            <WeightUOM>KG</WeightUOM>
            <TotalVolume>0.044</TotalVolume>
            <VolumeUOM>M3</VolumeUOM>
        </ConsignmentHeader>
        <ConsignmentNumber>0003</ConsignmentNumber>
        <ConsignmentHeader>
            <DangerousGoodsIndicator>Y</DangerousGoodsIndicator>
            <GrossWeight>12.45</GrossWeight>
            <WeightUOM>KG</WeightUOM>
            <TotalVolume>0.056</TotalVolume>
            <VolumeUOM>P3</VolumeUOM>
        </ConsignmentHeader>
    </Consignment>

预期输出-我想要通过使用PowerShell在XML中使用这种结构。

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<Shipment xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" >
    <ShipmentNumber>0012546776</ShipmentNumber>
    <Container>Selleys/Yates</Container>
    <Extnl_id/>
    <AddressForwardingAgent>
        <PartnerNumber>0000400260</PartnerNumber>
        <LanguageKey>EN</LanguageKey>
        <Name>TEST</Name>
        <HouseandStreet>TEST1</HouseandStreet>
        </AddressForwardingAgent>
    <AddressSender>
        <TransportPlanningPoint>4001</TransportPlanningPoint>
        <LanguageKey>EN</LanguageKey>
        <Name>TEST2</Name>
        <HouseandStreet>TEST2</HouseandStreet>
    </AddressSender>
    <Consignment>
    <ConsigmentLine>                 ## Need to insert this tag here
        <ConsignmentNumber>0001</ConsignmentNumber>
        <ConsignmentHeader>
            <DangerousGoodsIndicator>X</DangerousGoodsIndicator>
            <GrossWeight>2005.268</GrossWeight>
            <WeightUOM>KG</WeightUOM>
            <TotalVolume>3.856</TotalVolume>
            <VolumeUOM>M3</VolumeUOM>
        </ConsignmentHeader>
    </ConsigmentLine>
    <ConsigmentLine>    ## Need to insert this tag here
        <ConsignmentNumber>0002</ConsignmentNumber>
        <ConsignmentHeader>
            <DangerousGoodsIndicator>X</DangerousGoodsIndicator>
            <GrossWeight>21.12</GrossWeight>
            <WeightUOM>KG</WeightUOM>
            <TotalVolume>0.044</TotalVolume>
            <VolumeUOM>M3</VolumeUOM>
        </ConsignmentHeader>
    </ConsigmentLine>
    <ConsigmentLine>    ## Need to insert this tag here
        <ConsignmentNumber>0003</ConsignmentNumber>
        <ConsignmentHeader>
            <DangerousGoodsIndicator>Y</DangerousGoodsIndicator>
            <GrossWeight>12.45</GrossWeight>
            <WeightUOM>KG</WeightUOM>
            <TotalVolume>0.056</TotalVolume>
            <VolumeUOM>P3</VolumeUOM>
        </ConsignmentHeader>
    </ConsigmentLine>
    </Consignment>
根据

您需要首先捕获“ ConsignmentNumber”和“ ConsignmentHeader”节点,从xml中删除“ Consignment”节点,然后重新构建。

对于演示,我使用的是Here-String,但是您可能需要使用以下命令从文件中读取它: [xml]$xml = Get-Content -Path 'D:\MyCurrentXml.xml'

[xml]$xml = @"
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<Shipment xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" >
    <ShipmentNumber>0012546776</ShipmentNumber>
    <Container>Selleys/Yates</Container>
    <Extnl_id/>
    <AddressForwardingAgent>
        <PartnerNumber>0000400260</PartnerNumber>
        <LanguageKey>EN</LanguageKey>
        <Name>TEST</Name>
        <HouseandStreet>TEST1</HouseandStreet>
        </AddressForwardingAgent>
    <AddressSender>
        <TransportPlanningPoint>4001</TransportPlanningPoint>
        <LanguageKey>EN</LanguageKey>
        <Name>TEST2</Name>
        <HouseandStreet>TEST2</HouseandStreet>
    </AddressSender>
    <Consignment>
        <ConsignmentNumber>0001</ConsignmentNumber>
        <ConsignmentHeader>
            <DangerousGoodsIndicator>X</DangerousGoodsIndicator>
            <GrossWeight>2005.268</GrossWeight>
            <WeightUOM>KG</WeightUOM>
            <TotalVolume>3.856</TotalVolume>
            <VolumeUOM>M3</VolumeUOM>
        </ConsignmentHeader>
        <ConsignmentNumber>0002</ConsignmentNumber>
        <ConsignmentHeader>
            <DangerousGoodsIndicator>X</DangerousGoodsIndicator>
            <GrossWeight>21.12</GrossWeight>
            <WeightUOM>KG</WeightUOM>
            <TotalVolume>0.044</TotalVolume>
            <VolumeUOM>M3</VolumeUOM>
        </ConsignmentHeader>
        <ConsignmentNumber>0003</ConsignmentNumber>
        <ConsignmentHeader>
            <DangerousGoodsIndicator>Y</DangerousGoodsIndicator>
            <GrossWeight>12.45</GrossWeight>
            <WeightUOM>KG</WeightUOM>
            <TotalVolume>0.056</TotalVolume>
            <VolumeUOM>P3</VolumeUOM>
        </ConsignmentHeader>
    </Consignment>
</Shipment>
"@

要以您想要的方式重建它,这应该起作用:

# capture two arrays of nodes for 'ConsignmentNumber' and 'ConsignmentHeader'
$numbers = $xml.Shipment.Consignment.ChildNodes | Where-Object { $_.LocalName -eq 'ConsignmentNumber' }
$headers = $xml.Shipment.Consignment.ChildNodes | Where-Object { $_.LocalName -eq 'ConsignmentHeader' }

# remove the entire 'Consignment' node from the xml
$xml.Shipment.RemoveChild($xml.Shipment.Consignment)
# and create a new 'Consignment' node
$newConsignment = $xml.CreateElement('Consignment')

# loop through the arrays, create a new 'ConsigmentLine' node and add the captured nodes to it
for ($i = 0; $i -lt $numbers.Count; $i++) {
    $lineNode = $xml.CreateElement('ConsigmentLine')
    $lineNode.AppendChild($numbers[$i])
    $lineNode.AppendChild($headers[$i])
    # append this to the newly created 'Consignment' node
    $newConsignment.AppendChild($lineNode)
}
# finally, append the new 'Consignment' node to the 'Shipment' node
$xml.Shipment.AppendChild($newConsignment)

# and save the xml
$xml.Save('D:\MyCorrectedXml.xml')

结果:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Shipment xmlns:xsi="http://www.w3.org/2001/xmlschema-instance">
  <ShipmentNumber>0012546776</ShipmentNumber>
  <Container>Selleys/Yates</Container>
  <Extnl_id />
  <AddressForwardingAgent>
    <PartnerNumber>0000400260</PartnerNumber>
    <LanguageKey>EN</LanguageKey>
    <Name>TEST</Name>
    <HouseandStreet>TEST1</HouseandStreet>
  </AddressForwardingAgent>
  <AddressSender>
    <TransportPlanningPoint>4001</TransportPlanningPoint>
    <LanguageKey>EN</LanguageKey>
    <Name>TEST2</Name>
    <HouseandStreet>TEST2</HouseandStreet>
  </AddressSender>
  <Consignment>
    <ConsigmentLine>
      <ConsignmentNumber>0001</ConsignmentNumber>
      <ConsignmentHeader>
        <DangerousGoodsIndicator>X</DangerousGoodsIndicator>
        <GrossWeight>2005.268</GrossWeight>
        <WeightUOM>KG</WeightUOM>
        <TotalVolume>3.856</TotalVolume>
        <VolumeUOM>M3</VolumeUOM>
      </ConsignmentHeader>
    </ConsigmentLine>
    <ConsigmentLine>
      <ConsignmentNumber>0002</ConsignmentNumber>
      <ConsignmentHeader>
        <DangerousGoodsIndicator>X</DangerousGoodsIndicator>
        <GrossWeight>21.12</GrossWeight>
        <WeightUOM>KG</WeightUOM>
        <TotalVolume>0.044</TotalVolume>
        <VolumeUOM>M3</VolumeUOM>
      </ConsignmentHeader>
    </ConsigmentLine>
    <ConsigmentLine>
      <ConsignmentNumber>0003</ConsignmentNumber>
      <ConsignmentHeader>
        <DangerousGoodsIndicator>Y</DangerousGoodsIndicator>
        <GrossWeight>12.45</GrossWeight>
        <WeightUOM>KG</WeightUOM>
        <TotalVolume>0.056</TotalVolume>
        <VolumeUOM>P3</VolumeUOM>
      </ConsignmentHeader>
    </ConsigmentLine>
  </Consignment>
</Shipment>

PS您的示例x​​ml缺少最后的结束</Shipment>标记

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在 XML 中插入子节点

来自分类Dev

需要帮助使用php删除xml中的子级

来自分类Dev

PHP XML重复节点需要帮助总结foreach循环的值

来自分类Dev

需要帮助以使用POWERSHELL获取数组中的XML值

来自分类Dev

需要帮助解析XML并将其存储在Oracle表中

来自分类Dev

在 SQL Server 中检索 XML 数据时需要帮助

来自分类Dev

在GUI中需要帮助

来自分类Dev

在VBA中需要帮助

来自分类Dev

在 $_GET 中需要帮助

来自分类Dev

通过Gridview控件在插入过程中,Xml子子节点出现在子节点之外

来自分类Dev

需要帮助使用jquery搜索XML文件并将结果存储在变量中以供以后使用

来自分类Dev

需要帮助,使用jquery搜索XML文件并将结果存储在变量中以备后用

来自分类Dev

需要XML帮助

来自分类Dev

使用XML的节点和子节点将行从xml中插入到SQL Server中的表中

来自分类Dev

根据预期结果需要 XSLT 代码帮助以形成子节点

来自分类Dev

android:在OnPrepareOptionsMenu中需要帮助

来自分类Dev

在Powershell中的何处需要帮助

来自分类Dev

在Powershell中的何处需要帮助

来自分类Dev

CheckListBox中的字典需要帮助

来自分类Dev

android:在OnPrepareOptionsMenu中需要帮助

来自分类Dev

在SQL连接中需要帮助

来自分类Dev

在C中需要简单的帮助

来自分类Dev

在片段中需要帮助(Android)

来自分类Dev

在列表 Java 中需要帮助

来自分类Dev

d3-节点中需要的帮助

来自分类Dev

Sprite节点随机渲染...需要帮助

来自分类Dev

需要帮助以递增的顺序查找特定节点?

来自分类Dev

需要帮助,如果存在,然后插入

来自分类Dev

需要帮助的hang子手C#