Замените все разрывы строк на \ n и табуляции на \ t в строке XML на powershell - PullRequest
0 голосов
/ 03 мая 2018

У меня есть такая строка XML:

<store:book name="history">
  <department>one</department>
  <department>two</department>
</store:book>

Мне нужно изменить его следующим образом, поскольку мне нужно передать его в качестве параметра веб-службе REST с телом JSON:

<store:book name="history">\n\t<department>one</department>\n\t<department>two</department>\n</store:book>

Как мне это сделать с помощью powershell?

Обратите внимание, что строка читается после чтения содержимого файла как:

$updatedSource = Get-Content $file -Raw

РЕДАКТИРОВАТЬ: чтобы лучше уточнить мое требование, мне нужно заполнить параметр JSON следующим образом:

$postData = "{""Source"":""${updatedSource}""}"

РЕДАКТИРОВАТЬ: Добавление целевого вызова REST. Код для запроса уже правильный, я проверил его с помощью строки, заполненной, поскольку цель будет ...

[System.Net.HttpWebRequest] $req = [System.Net.HttpWebRequest] [System.Net.WebRequest]::Create($finalUri)
$req.Headers.Add("Authorization", "Bearer " + $toolingService.SessionHeaderValue.sessionId)
$req.ContentType = "application/json"
$req.Method = "PATCH"

$postData = "{""Source"":""${updatedSource}""}"
$encodedContent = [System.Text.Encoding]::UTF8.GetBytes($postData)

$req.ContentLength = $encodedContent.length
$requestStream = $req.GetRequestStream()
$requestStream.Write($encodedContent, 0, $encodedContent.length)
$requestStream.Close()

[System.Net.WebResponse] $res =  $req.GetResponse()
[System.IO.StreamReader] $reader = New-Object System.IO.StreamReader($res.GetResponseStream(), [System.Text.Encoding]::UTF8)
$result = $reader.ReadToEnd()

$serializer = New-Object -TypeName System.Web.Script.Serialization.JavaScriptSerializer
$obj = $serializer.DeserializeObject($result)

Ответы [ 2 ]

0 голосов
/ 03 мая 2018

Окончательно решено следующим образом:

Заменен этот код:

$updatedSource = Get-Content $file -Raw

с:

$updatedSource = Get-Content $file
$updatedSource = $updatedSource -join '\n'
$updatedSource = $updatedSource.replace("""","\""")

Сами таблицы определенно не являются проблемой, поскольку они принимаются как значения JSON.

0 голосов
/ 03 мая 2018

Вы можете использовать функцию замены:

$updatedSource = $updatedSource.Replace("`n","\n").Replace("`t","\t")

обратите внимание, что escape-символ - это знак обратного удара, а не апостроф.

...