2017-03-06 81 views
1

我想使用PowerShell腳本將具有相同XML屬性格式的多個XML文件轉換爲JSON文件。這個想法是創建一個JSON列表,每個項目都是XML文件的JSON表示。它可行嗎?輸入和輸出的例子:將多個XML轉換爲JSON列表

輸入:

File1.xml

<File> 
<Child1> First xml child 1</Child1> 
<Child2>First xml child 2</Child2> 
</File> 

File2.xml

<File> 
<Child1> Second xml child 1</Child1> 
<Child2>Second xml child 2</Child2> 
</File> 

輸出:

[ 
    { 
    File: [ 
     {Child1 : First xml child 1 }, 
     { Child2: First xml child 2} 
    ] 
    }, 
    { 
    File: [ 
     {Child1 : Second xml child 1 }, 
     { Child2: Second xml child 2} 
    ] 
    } 
] 
+3

*「是否可行?」*確定。但是SO不是其他人爲你寫代碼的地方。你到目前爲止做了什麼(顯示你的代碼),以及你需要什麼特定的問題(在你的代碼中)? –

回答

0

寫下您的這

// To convert an XML node contained in string xml into a JSON string 
XmlDocument doc = new XmlDocument(); 
doc.LoadXml(xml); 
string jsonText = JsonConvert.SerializeXmlNode(doc); 
+0

或使用內置的'JavaScriptSerializer'不依賴於外部包,在PowerShell中它可能會變得棘手 – abatishchev

+0

非常簡單。我不確定爲什麼OP在他們的問題中添加了C#標記,但是從問題文本中可以清楚地看到他們需要一個PowerShell腳本。那麼,你如何將它變成一個PowerShell腳本?什麼是完整的類型名稱,並且是預先安裝的所有類型,還是需要下載依賴項...? – mklement0

1

下自己的格式頂部使用一個輔助功能,ConvertFrom-Xml,轉換只有非常簡單的XML文檔,如您的樣本文件與有序的鍵嵌套哈希表,然後將其轉換成JSON與ConvertTo-Json

# Helper function that converts a *simple* XML document to a nested hashtable 
# with ordered keys. 
function ConvertFrom-Xml { 
    param([parameter(Mandatory, ValueFromPipeline)] [System.Xml.XmlNode] $node) 
    process { 
    if ($node.DocumentElement) { $node = $node.DocumentElement } 
    $oht = [ordered] @{} 
    $name = $node.Name 
    if ($node.FirstChild -is [system.xml.xmltext]) { 
     $oht.$name = $node.FirstChild.InnerText 
    } else { 
     $oht.$name = New-Object System.Collections.ArrayList 
     foreach ($child in $node.ChildNodes) { 
     $null = $oht.$name.Add((ConvertFrom-Xml $child)) 
     } 
    } 
    $oht 
    } 
} 

[xml[]] (Get-Content -Raw file[12].xml) | ConvertFrom-Xml | ConvertTo-Json -Depth 3 

與樣品文件,這產生了:

[ 
    { 
     "File": [ 
        { 
         "Child1": " First xml child 1" 
        }, 
        { 
         "Child2": "First xml child 2" 
        } 
       ] 
    }, 
    { 
     "File": [ 
        { 
         "Child1": " Second xml child 1" 
        }, 
        { 
         "Child2": "Second xml child 2" 
        } 
       ] 
    } 
]