我有一个不寻常的XML数据结构,需要在其中更新作业编号属性值。
<?xml version="1.0"?>
<MiscContainer version="2018-1">
<Object name="MainObject" type="TDM_Container">
<Object name="OrderList" type="TDM_List_Order">
<List name="Items">
<Object type="TDM_Item_Order">
<Property name="TraySystemType" value="stNone"/>
</Object>
</List>
</Object>
<Object name="CustomDataList" type="TDM_List_CustomData">
<List name="Items">
<Object type="TDM_Item_CustomData">
<Property name="CustomDataID" value="CDAB5D3000B66D45D69F4F27074E55E0D8"/>
<Property name="FieldCaption" value="ZB Encode Account#"/>
<Property name="Value" value="New"/>
<Property name="Kind" value="cdkPublic"/>
</Object>
<Object type="TDM_Item_CustomData">
<Property name="CustomDataID" value="CDB0C755BF8BEB45419DED0B8D4A5CF8B4"/>
<Property name="FieldCaption" value="PO#"/>
<Property name="Value" value="000009"/>
<Property name="Kind" value="cdkPublic"/>
</Object>
<Object type="TDM_Item_CustomData">
<Property name="CustomDataID" value="CDB10DBE4FD0BD4CAA96B22AA6CD9A83C2"/>
<Property name="FieldCaption" value="Job Number"/>
<Property name="Value" value="1234"/>
<Property name="Kind" value="cdkPublic"/>
</Object>
<Object type="TDM_Item_CustomData">
<Property name="CustomDataID" value="CDD69CA4A79BE145369C3FD889E18E0BCF"/>
<Property name="FieldCaption" value="coupon 1"/>
<Property name="Value" value="3123213"/>
<Property name="Kind" value="cdkPublic"/>
</Object>
我无法使用XML对象弄清楚它,因此我尝试仅使用字符串替换功能。替换功能的问题是我需要跨两行搜索以找到唯一的匹配项。我使用了正则表达式(.*
)来处理根本没有值的可能性,但是我需要插入一个值。
这是我的代码:
$Folder = '\\3ipbg-fs-p01\private\UDI-Data-3i-Dev\inbound\archive\'
Get-ChildItem $Folder | ForEach-Object -Process {
if ($_.PSIsContainer) {
$sFolderPath = $_.FullName
$sFolderName = Split-Path $sFolderPath -Leaf
Get-ChildItem $sFolderPath | Where {
$_.Name -like $sFolderName + '.xml'
} | foreach {
$sFilepath = $_.FullName
(Get-Content $sFilepath) -replace '<Property name="FieldCaption" value="Job Number"/>
<Property name="Value" value="(.*)"/>','<Property name="FieldCaption" value="Job Number"/>
<Property name="Value" value="1234"/>' | Out-File -Encoding Ascii $sFilepath
}
}
}
但是,由于CR和LF,它不起作用。仅出于测试目的,如果我删除多行,它可以工作,但是我需要多行,因为单行不是唯一的。
希望有人可以帮助替换字符串或XML路由。