0
如何從PowerShell中的XML文檔獲取多個文本元素?從XML獲取多個文本元素
下面是一個例子:
<log>
<logentry revision="152">
<author>me</author>
<date>2014-03-28T14:54:27.443978Z</date>
<msg>Summary 1
* Note 1
* Note 2</msg></logentry>
<logentry revision="153">
<author>me</author>
<date>2014-03-28T16:24:43.438847Z</date>
<msg>Summary 2</msg>
</logentry>
<logentry revision="154">
<author>me</author>
<date>2014-03-31T16:00:01.590373Z</date>
<msg>Summary 3</msg>
</logentry>
<logentry revision="155">
<author>me</author>
<date>2014-04-01T09:28:09.744015Z</date>
<msg>Summary 4
* Note 3
* Note 4
</msg>
</logentry>
</log>
這是svn log
特定版本的輸出。自從上一個腳本運行手動彙總到文本文件以來,我想簡化日誌消息。我可以讀取現有文件,解析上一個修訂版本併爲新版本調用svn log
。我想獲得以上XML文檔中的下列文本輸出:
Summary 1
* Note 1
* Note 2
Summary 2
Summary 3
Summary 4
* Note 3
* Note 4
還要注意在每個「logentry /味精」元素的不一致最終換行符。所有空行都應該被刪除,但所有其他換行必須保留。另外,每個「msg」元素必須放在一個新行中,而不是將多個消息粘貼在一個輸出行中(現在我已經有了)。
這裏是我當前的代碼:
$newMsgs = ($xml.log.logentry.msg).Replace("`n`n", "`n").Trim()
但它並不把每個「味精」,在一個單獨的行。此外,我不明白它究竟發生了什麼,什麼時候會中斷。我熟悉C#中的BCL,但不是那麼多的PowerShell和它自己的解決方法。
的XML錯誤必須是一個錯字,因爲我已經複製它脫離了控制檯窗口。所以你的命令給了我一串字符串,我想每行一個。我怎樣才能將它轉換成一個帶有一致的換行符的字符串,並將它與以前的內容一起寫回文件? – ygoe
你想把它加回到XML中,然後保存?當你說「一致的換行符」時,你是否期望回車換行和換行符,或者只是換行符,或者不管它是混合還是混合,只要它們位於正確的位置? –
不,我只是使用XML作爲源代碼,但是將所有內容寫入純文本文件。 SVN也可以給我純文本,但XML應該更安全的解析。我更喜歡CRLF,因爲這是Windows使用的,SVN似乎只返回LF。現在我有兩個醜陋的混合,並且在「味精」項目之間缺少換行符。但是用一些Replace()調用來清理已存在的換行符應該很容易。 – ygoe