Скрипт PHP в Powershell

Я не очень разбираюсь в PHP, но я унаследовал PHP-скрипт, который я хотел бы преобразовать в powershell. Я не уверен, возможно ли это. Но похоже, что скрипт получает список продуктов в виде XML из службы. Затем он выполняет некоторое удаление кода cr / lf, заменяя несколько символов кавычек, а затем преобразует xml в json. Кажется, довольно прямо. Я не очень разбираюсь в PowerShell, поэтому я надеялся, что это будет простая задача для кого-то здесь.

<?php
$fileContents= file_get_contents("http://svc.mysite.com/api/GetItems");

$fileContents = str_replace(array("\n", "\r", "\t"), '', $fileContents);

$fileContents = trim(str_replace('"', "'", $fileContents));

$simpleXml = simplexml_load_string($fileContents);

$map = json_decode(json_encode($simpleXml));

print json_encode($map->item);
?>

Вот образец данных XML

<?xml version="1.0" encoding="utf-8" ?>
<items xmlns="http://svc.tricorbraun.com/api/GetItems" version="1">
<item><ItemID>000072</ItemID><ItemName>Dropper Tip Closure</ItemName><ItemGroup>Closures</ItemGroup><Shape>Round</Shape><Style>Fitment/Plug</Style></item>
<item><ItemID>000182</ItemID><ItemName>28-480, P/P Push and Turn Closure</ItemName><ItemGroup>Closures</ItemGroup><Shape>Round</Shape><Style>Child Resistant</Style></item>
<item><ItemID>000187</ItemID><ItemName>28-480, P/P Child Resistant Closure</ItemName><ItemGroup>Closures</ItemGroup><Shape>Round</Shape><Style>Child Resistant</Style></item>
<item><ItemID>000190</ItemID><ItemName>28mm SPEC, P/P Dispensing Closure</ItemName><ItemGroup>Closures</ItemGroup><Shape>Round</Shape><Style>Dispensing</Style></item>
</items>

Я придумал это, но если произойдет сбой с «Неожиданной ошибкой пространства имен»

    $doc = New-Object System.Xml.XmlDocument
$memStream = new-object System.IO.MemoryStream
$jsonWriter = [System.Runtime.Serialization.Json.JsonReaderWriterFactory]::CreateJsonWriter($memStream)

$doc.Load("http://svc.mysite.com/api/GetItems")
$doc.Save($jsonWriter)
$bytes = $memStream.ToArray()

[System.Text.Encoding]::UTF8.GetString($bytes,0,$bytes.Length)
Write-Output $jsonWriter.ToString()

-1

Решение

Нам нужно увидеть ответ от этой строки:

$fileContents= file_get_contents("http://svc.mysite.com/api/GetItems");

Можете ли вы запустить следующее в PowerShell и выдать результаты в PasteBin или где-нибудь еще?

Invoke-WebRequest "http://svc.mysite.com/api/GetItems" |
Export-CLIXMl C:\temp\pathTo.XML

После того, как вы это сделаете, общие задачи заключаются в том, чтобы удалить эти символы: «\ n», «\ r», «\ t», что легко, и заменить двойные кавычки на одинарные, что легко. PowerShell имеет команду ConvertFrom-Json, что также упрощает этот аспект.

Если вы ответите в ответ с примером вывода из кода PowerShell, который я дал выше, я могу помочь вам разобраться с остальными.


Спасибо за ответ с полным типом файла.

Предполагая, что у нас есть вывод .xml в текстовом файле .xml, этот процесс даст вам объекты JSON, все с PowerShell. Это действительно довольно просто.

[xml]$string = get-content C:\temp\Pathto.xml
$string.items.Item  | Select-Object Item*,Shape,Style | ConvertTo-Json

Выход

[
{
"ItemID":  "000072",
"ItemName":  "Dropper Tip Closure",
"ItemGroup":  "Closures",
"Shape":  "Round",
"Style":  "Fitment/Plug"},
{
"ItemID":  "000182",
"ItemName":  "28-480, P/P Push and Turn Closure",
"ItemGroup":  "Closures",
"Shape":  "Round",
"Style":  "Child Resistant"},
{
"ItemID":  "000187",
"ItemName":  "28-480, P/P Child Resistant Closure",
"ItemGroup":  "Closures",
"Shape":  "Round",
"Style":  "Child Resistant"},
{
"ItemID":  "000190",
"ItemName":  "28mm SPEC, P/P Dispensing Closure",
"ItemGroup":  "Closures",
"Shape":  "Round",
"Style":  "Dispensing"}
]

Я не работаю с JSOn на ежедневной основе, но это, безусловно, выглядит для меня как действительный конверт JSON и контент, и он проверяется на http://jsonlint.com/

Еще одна вещь. Скорее всего, вы можете заменить первую строку на

[xml]$string = Invoke-WebRequest "http://svc.mysite.com/api/GetItems"
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]