Я работал над сценарием для анализа XML-документа, чтобы найти дубликаты определенного раздела внутри файла.Для контекста, это часть предварительной обработки, которую XML-документ проходит перед тем, как пройти через процесс импорта.
Мне удалось сузить конкретный раздел, который приводит к сбою процесса импорта:
<OrderLineAct IsEmpty="N" Imported="Y" RecordID="" Error="" Version="15.4.0.3" OrderNumber="21-000138765">
<Code>RR</Code>
<CodeType>POSITION</CodeType>
<JobCodeID>0</JobCodeID>
<JobsFltID>0</JobsFltID>
<LineID>16348542</LineID>
<Modified>6/6/2018 8:50:00 AM</Modified>
<ModifiedBy>JANETC</ModifiedBy>
<OrderID>2294006</OrderID>
<Qty>0</Qty>
<QtyUOM></QtyUOM>
<Section>3863523</Section>
</OrderLineAct>
<OrderLineAct IsEmpty="N" Imported="N" RecordID="" Error="" Version="15.4.0.3">
<Code>RR</Code>
<CodeType>POSITION</CodeType>
<JobCodeID>0</JobCodeID>
<JobsFltID>0</JobsFltID>
<LineID>16348542</LineID>
<Modified>6/6/2018 8:50:00 AM</Modified>
<ModifiedBy>JANETC</ModifiedBy>
<OrderID>2294006</OrderID>
<Qty>0</Qty>
<QtyUOM></QtyUOM>
<Section>3863523</Section>
</OrderLineAct>
Наличие этого дублирующего раздела приводит к тому, что файл проходит через бесконечный цикл внутри импортера, в результате чегов файле, не завершающем процесс импорта.
Что мне нужно сделать, это определить, идентичен ли какой-либо из этих OrderLineActs
существующему в его родительском узле.Каждый из этих OrderLineActs
находится внутри OrderLine
сегмента.
Мне трудно думать о том, как этого добиться.Моей первой мыслью было пройти и удалить все, что содержит Imported="N"
, но затем могло бы возникнуть проблема, если другой OrderLineAct
не удастся импортировать по какой-либо причине.
Моя идея состояла в том, чтобы структурировать его аналогично тому, как я полностью удаляю другой тег внутри XML:
Function Remove-UnitMeter
{
param($xml)
# strip the xml of any UnitMeter tags - done for every schema
foreach($VendorInvoice in $xml.VendorInvoices)
{
foreach($Order in $VendorInvoice.Order)
{
# remove the UnitMeter tag from the XML file
if ($Order.UnitMeter -ne $null){
$Order.RemoveChild($Order.UnitMeter) | Out-Null # out-null otherwise it'll output all of the tags
}
} # end order
} # end vendorinvoice
return $xml
}
Я знаю, что должен удалить дочерний элемент из родительского, но мне нужнобыть в состоянии определить, является ли это истинным дубликатом, прежде чем я.
Кто-нибудь когда-либо делал что-то подобное раньше?Я могу предоставить больше информации по мере необходимости.Спасибо.