Образец XML Файл:
<?xml version="1.0" encoding="utf-8"?>
<Searchable xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" label="$RESX('Bank.1_8','CRDM_AgeInformation','Age Information')" xmlns="http://sysrepublic.com/Secure/4.0/DSL/SearchService">
<Parameters />
<Fields>
<Field data-type="System.Int64" is-editable="true" id="ageinformation_transactionid" label="$RESX('Bank.1_8','TransactionID','Transaction ID')" is-mandatory-display-field="false" is-hidden-display-field="false" is-virtual-date-time="false" is-display-field-only="false" use-utc-datetime="true" apply-user-timezone-offset="false" show-date="true" show-time="true" is-favourite="false" common-field="true">
<FieldDescription primary-key="false" nullable="false" readonly="false" hidden="false" format="text" enable-required-validation="true" />
<Operators>
<Operator name="equal" />
<Operator name="notequal" />
<Operator name="greaterthan" />
<Operator name="greaterthanequal" />
<Operator name="lessthan" />
<Operator name="lessthanequal" />
<Operator name="between" />
<Operator name="notbetween" />
<Operator name="in" />
<Operator name="notin" />
</Operators>
<LeftExpression>
<Field data-type="System.Int64" common-field="true">
<CollectionDescription collection="pos.CRDM_AgeInformation">
<Relationship parent="pos.CRDM_Header">
<RelatedField from="TransactionID" to="TransactionID" common-to-field="true" />
<RelatedField from="TradingDay" to="TradingDay" common-to-field="true" />
</Relationship>
</CollectionDescription>
<Description>TransactionID</Description>
</Field>
</LeftExpression>
</Field>
<Field data-type="System.Int64" is-editable="true" id="ageinformation_checkpointid" label="$RESX('Bank.1_8','CheckPointID','CheckPoint ID')" is-mandatory-display-field="false" is-hidden-display-field="false" is-virtual-date-time="false" is-display-field-only="false" use-utc-datetime="true" apply-user-timezone-offset="false" show-date="true" show-time="true" is-favourite="false">
<FieldDescription primary-key="false" nullable="false" readonly="false" hidden="false" format="text" enable-required-validation="true" />
<Operators>
<Operator name="equal" />
<Operator name="notequal" />
<Operator name="greaterthan" />
<Operator name="greaterthanequal" />
<Operator name="lessthan" />
<Operator name="lessthanequal" />
<Operator name="between" />
<Operator name="notbetween" />
<Operator name="in" />
<Operator name="notin" />
</Operators>
<LeftExpression>
<Field data-type="System.Int64">
<CollectionDescription collection="pos.CRDM_AgeInformation">
<Relationship parent="pos.CRDM_Header">
<RelatedField from="TransactionID" to="TransactionID" common-to-field="true" />
<RelatedField from="TradingDay" to="TradingDay" common-to-field="true" />
</Relationship>
</CollectionDescription>
<Description>CheckPointID</Description>
</Field>
</LeftExpression>
</Field>
</Fields>
</Searchable>
Проблема, которую необходимо решить для:
- Проверьте, существует ли метка XML, используемая в разных полях в таблице базы данных.
- Если она существует, ничего не делать.
- Если он не существует, измените метку узла. Среднее значение в пределах () должно быть заменено идентификатором узла. После этого, если замененное значение имеет подчеркивание, замените его точкой
- Отправьте обновленное значение в настройку тестовой таблицы в базе данных
Ниже приведен код, который я имею пробовал:
$SQLServer = "WIN-17V7QT0IJVK"
$SQLDBName = "Test"
$uid ="WIN-17V7QT0IJVK\Administrator"
$pwd = "letmebackinplease"
$ConnectionString = "Server = $SQLServer; Database = $SQLDBName; Integrated Security = True;"
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection $ConnectionString
$SqlConnection.open()
$xml = New-Object XML
$n = "C:\Users\Administrator\Desktop\test2.xml"
$xml.Load($n)
$nodes = $xml.Searchable.Fields.Field
# $regex = '()\(.*?\)'
$regex = '\((.*)\)'
foreach($node in $nodes) {
$a = $node.label
$a -match $regex
$data = $Matches[1]
$z = $data.split(',')
Write-Output($z[0])
Write-Output($z[1])
Write-Output($z[2])
$query = "
SELECT
count(ID) as cnt
FROM [Secure4].[secure].[Resource]
WHERE
[ResourceType] = " + $z[0]
$query += " AND [ResourceKey] = " + $z[1]
$query += " AND [ResourceValue] = " + $z[2]
Write-Output($query)
$Resource = (Invoke-SQLCmd -query $query -Server $SQLServer)
Write-Output($Resource)
$id = $node.id
Write-Output($id)
#$description = $node.Description
#Write-Output($description)
if($Resource -eq '0'){
#$id = $node.id
#Write-Output($id)
#$description = $node.description
#$mid_value = $id.replace('
$new_label = "$RESX('Ebr.Crdm.Store.2_0',"+$id+",'XXXXXX')"
$node.label = $new_label
}
Write-Output($node.label)
}
Появляется при отладке моего кода, я не могу правильно обновить метку. Может кто-нибудь, пожалуйста, предложите лучший способ изменить это. При запуске кода я не вижу распечатанного $ node.label.
Проблемы :
- Не видеть распечатку $ node.description в моем выводе (решено)
- Не видеть узел $. этикетка распечатывается после обновления в блоке IF