Изменение меток в XML с использованием отключенного условия Powershell - PullRequest
0 голосов
/ 12 марта 2020

Образец 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>

Проблема, которую необходимо решить для:

  1. Проверьте, существует ли метка XML, используемая в разных полях в таблице базы данных.
  2. Если она существует, ничего не делать.
  3. Если он не существует, измените метку узла. Среднее значение в пределах () должно быть заменено идентификатором узла. После этого, если замененное значение имеет подчеркивание, замените его точкой
  4. Отправьте обновленное значение в настройку тестовой таблицы в базе данных

Ниже приведен код, который я имею пробовал:

$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.

Проблемы :

  1. Не видеть распечатку $ node.description в моем выводе (решено)
  2. Не видеть узел $. этикетка распечатывается после обновления в блоке IF

1 Ответ

1 голос
/ 24 марта 2020

Вот как должен быть записан ваш блок IF:

if($Resource -match '0'){
        $mid_value = $id -replace "_","."
        $new_label = "$RESX(Ebr.Crdm.Store.2_0,"+$mid_value+","+$description+")"
        $node.label = $new_label
        Write-Output("The updated label is"+$node.label)

        $b = $node.label
        $b -match $regex
        $newdata = $Matches[1]
        $y = $newdata.split(',')
        Write-Output("The first updated element of the node label is"+" "+$y[0])
        Write-Output("The second updated element of the node label is"+" "+$y[1])
        Write-Output("The third updated element of the node label is"+" "+$y[2])
        $insert_query = "INSERT INTO [Secure4].[secure].[Resource]
               ([ResourceType],[CultureCode],[ResourceKey],[ResourceValue])
               VALUES
                    ('"+$y[0]+"','en','"+$y[1]+"','"+$y[2]+"')"
        Write-Output($insert_query)
         $Resource2 = (Invoke-SQLCmd -query $insert_query -Server $SQLServer) 
         #write-output($Resource2)

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...