Привет, я пытаюсь прочитать мои узлы из xml в PowerShell. Затем мне нужно найти недействительные узлы (когда доступно ArrayDimensions
и Childnode получил ReferenceType
= "HasComponent```. Затем я хочу удалить этот узел из моего результата. Код:
[xml]$uar = Get-Content -Path '.\OpcUaMap(3)_28_07.uar'
$ns = New-Object System.Xml.XmlNamespaceManager($uar.NameTable)
$ns=@{test="http://opcfoundation.org/UA/2011/03/UANodeSet.xsd";
ua="ua="http://xxx/NodeSet.xsd";
xsi="http://www.w3.org/2001/XMLSchema-instance";
uax="http://opcfoundation.org/UA/2008/02/Types.xsd";
xsd="http://www.w3.org/2001/XMLSchema";
pv="http://yyy/NodeSet.xsd"}
$result=Select-xml -xml $uar -xpath "//test:UAVariable[contains(@NodeId,'ns=1;s=::')][starts-with(@DataType,'i=')]" -namespace $ns | select -ExpandProperty node
write host $result
$result | ConvertTo-Html`
-Property DataType, NodeId `
> ".\result.html"
XML:
<?xml version="1.0" encoding="utf-8"?>
<UANodeSet xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:uax="http://opcfoundation.org/UA/2008/02/Types.xsd" xmlns:ua="http://xxx/NodeSet.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:pv="http://yyy/NodeSet.xsd" xmlns="http://opcfoundation.org/UA/2011/03/UANodeSet.xsd">
<UAObject NodeId="ns=1;s=::" BrowseName="1:::">
<DisplayName><Default></DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">ns=2;i=10001</Reference>
<Reference ReferenceType="Organizes" IsForward="false">ns=2;i=20001</Reference>
<Reference ReferenceType="Organizes">ns=1;s=::AsGlobalPV</Reference>
<Reference ReferenceType="Organizes">ns=1;s=::Program</Reference>
</References>
<Extensions>
<Extension>
<pv:ObjectExtension>
<ACL>
<ACE Role="1" Allow="0x017F"/>
<ACE Role="2" Allow="0x015F"/>
</ACL>
</pv:ObjectExtension>
</Extension>
</Extensions>
</UAObject>
<UAObject ParentNodeId="ns=1;s=::" NodeId="ns=1;s=::AsGlobalPV" BrowseName="1:Global PV">
<DisplayName>Global PV</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=61</Reference>
<Reference ReferenceType="Organizes" IsForward="false">ns=1;s=::</Reference>
<Reference ReferenceType="Organizes">ns=1;s=::AsGlobalPV:gFahrzeug</Reference>
<Reference ReferenceType="Organizes">ns=1;s=::AsGlobalPV:gLebewesen</Reference>
</References>
</UAObject>
<UAVariable DataType="ns=1;i=100000" ParentNodeId="ns=1;s=::AsGlobalPV" NodeId="ns=1;s=::AsGlobalPV:gFahrzeug" BrowseName="1:gFahrzeug" AccessLevel="3" ValueRank="-1">
<DisplayName>gFahrzeug</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">ns=1;i=100005</Reference>
<Reference ReferenceType="HasComponent">ns=1;s=::AsGlobalPV:gFahrzeug.Kraftfahrzeug</Reference>
</References>
<Extensions>
<Extension>
<pv:VariableExtension AuditEvents="true">
<Value>
<Binding Type="PV" Target="::gFahrzeug"/>
</Value>
</pv:VariableExtension>
</Extension>
</Extensions>
</UAVariable>
<UAVariable DataType="ns=1;i=100010" ParentNodeId="ns=1;s=::AsGlobalPV:gFahrzeug" NodeId="ns=1;s=::AsGlobalPV:gFahrzeug.Kraftfahrzeug" BrowseName="1:Kraftfahrzeug" AccessLevel="3" ValueRank="-1">
<DisplayName>Kraftfahrzeug</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">ns=1;i=100015</Reference>
<Reference ReferenceType="HasComponent">ns=1;s=::AsGlobalPV:gFahrzeug.Kraftfahrzeug.LKW</Reference>
<Reference ReferenceType="HasComponent">ns=1;s=::AsGlobalPV:gFahrzeug.Kraftfahrzeug.PKW</Reference>
</References>
<Extensions>
<Extension>
<pv:VariableExtension AuditEvents="true">
<Value>
<Binding Type="PV" Target="::gFahrzeug.Kraftfahrzeug"/>
</Value>
</pv:VariableExtension>
</Extension>
</Extensions>
</UAVariable>
<UAVariable DataType="i=3" ParentNodeId="ns=1;s=::AsGlobalPV:gFahrzeug.Kraftfahrzeug" NodeId="ns=1;s=::AsGlobalPV:gFahrzeug.Kraftfahrzeug.LKW" BrowseName="1:LKW" AccessLevel="3" ValueRank="1" ArrayDimensions="2">
<DisplayName>LKW</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=63</Reference>
<Reference ReferenceType="HasComponent">ns=1;s=::AsGlobalPV:gFahrzeug.Kraftfahrzeug.LKW[0]</Reference>
<Reference ReferenceType="HasComponent">ns=1;s=::AsGlobalPV:gFahrzeug.Kraftfahrzeug.LKW[1]</Reference>
</References>
<Extensions>
<Extension>
<pv:VariableExtension AuditEvents="true">
<Value>
<Binding Type="PV" Target="::gFahrzeug.Kraftfahrzeug.LKW"/>
</Value>
</pv:VariableExtension>
</Extension>
</Extensions>
</UAVariable>
<UAVariable DataType="i=3" ParentNodeId="ns=1;s=::AsGlobalPV:gFahrzeug.Kraftfahrzeug.LKW" NodeId="ns=1;s=::AsGlobalPV:gFahrzeug.Kraftfahrzeug.LKW[0]" BrowseName="1:LKW[0]" AccessLevel="3">
<DisplayName>LKW[0]</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=63</Reference>
</References>
<Extensions>
<Extension>
<pv:VariableExtension AuditEvents="true">
<ACL>
<ACE Role="1" Allow="0x017F"/>
<ACE Role="2" Allow="0x015F"/>
</ACL>
<Value>
<Binding Type="PV" Target="::gFahrzeug.Kraftfahrzeug.LKW[0]"/>
</Value>
</pv:VariableExtension>
</Extension>
</Extensions>
</UAVariable>
<UAVariable DataType="i=3" ParentNodeId="ns=1;s=::AsGlobalPV:gFahrzeug.Kraftfahrzeug.LKW" NodeId="ns=1;s=::AsGlobalPV:gFahrzeug.Kraftfahrzeug.LKW[1]" BrowseName="1:LKW[1]" AccessLevel="3">
<DisplayName>LKW[1]</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=63</Reference>
</References>
<Extensions>
<Extension>
<pv:VariableExtension AuditEvents="true">
<ACL>
<ACE Role="1" Allow="0x017F"/>
<ACE Role="2" Allow="0x015F"/>
</ACL>
<Value>
<Binding Type="PV" Target="::gFahrzeug.Kraftfahrzeug.LKW[1]"/>
</Value>
</pv:VariableExtension>
</Extension>
</Extensions>
</UAVariable>
</UANodeSet>
Мой результат:
DataType : i=3
ParentNodeId : ns=1;s=::AsGlobalPV:gFahrzeug.Kraftfahrzeug
NodeId : ns=1;s=::AsGlobalPV:gFahrzeug.Kraftfahrzeug.LKW
BrowseName : 1:LKW
AccessLevel : 3
ValueRank : 1
ArrayDimensions : 2
DisplayName : LKW
References : References
Extensions : Extensions
DataType : i=3
ParentNodeId : ns=1;s=::AsGlobalPV:gFahrzeug.Kraftfahrzeug.LKW
NodeId : ns=1;s=::AsGlobalPV:gFahrzeug.Kraftfahrzeug.LKW[0]
BrowseName : 1:LKW[0]
AccessLevel : 3
DisplayName : LKW[0]
References : References
Extensions : Extensions
DataType : i=3
ParentNodeId : ns=1;s=::AsGlobalPV:gFahrzeug.Kraftfahrzeug.LKW
NodeId : ns=1;s=::AsGlobalPV:gFahrzeug.Kraftfahrzeug.LKW[1]
BrowseName : 1:LKW[1]
AccessLevel : 3
DisplayName : LKW[1]
References : References
Extensions : Extensions
, так что он работает. Теперь я хочу удалить недопустимое значение, например ns=1;s=::AsGlobalPV:gFahrzeug.Kraftfahrzeug.LKW
, потому что это объявление массива и он недействителен для отображения. Как мне избавиться от него: каждый узел Displayname
, но не все получили Arraydimensions
, поэтому, если Arraydimensions
доступен (не emtpy), а ReferenceType
получил значение в своем недопустимом node. Я пробовал что-то с РЕДАКТИРОВАТЬ:
$result | foreach {
$AttExists = $_.Arraydimensions
$NodeExists = $_.ReferenceType
if ($AttExists){
if ($NodeExists = 'HasComponent'){
Write-Host 'Delete'
}
else{
Write-Host 'OK'
}
}
else{
Write-Host 'OK'
}
}
Результат:
Delete
OK
OK
OK
Delete
OK
OK
OK
Delete
OK
OK
кажется, что он не смотрел в моем ссылочном типе для «HasComponent», потому что последнее удаление неверно. быть таким:
Delete
OK
OK
OK
Delete
OK
OK
OK
OK
OK
OK