单独的Read-Host连接字符串,然后添加XML标记

时间:2015-12-21 16:23:47

标签: xml loops powershell powershell-v3.0

我有一个PowerShell代码,我试图将连接的字符串与两个Read-Hosts输入分开:

$Response = 'Y'
$URLName = $Null
$SecondURLName = @()

# Enter URL
do {
    $URLName = Read-Host "Please enter the URL (Example:  www.example.com)" 
    $Response = Read-Host 'Do you want to add more URLs? (y/n)'
    $SecondURLName += $URLName
} until ($Response -eq 'n')

使用下面相同的添加XML标记分隔串联字符串的最佳方法是什么:

# Create a new XML File with member root node
$XMLDocument = New-Object System.XML.XMLDocument

# New Node
$MemberRoot = $XMLDocument.CreateElement("url")

# Append as child to an existing node
$XMLDocument.appendChild($MemberRoot)

# Add URL to member Node
$XMLEntry = $MemberRoot.appendChild($XMLDocument.CreateTextNode("$SecondURLName"))

# Save File 
$XMLDocument.Save("urls.xml")

以下是我保存在urls.xml文件中的脚本的当前结果:

<url>thisisfromread-host1.com thisisfromread-host2.com</url>

我需要在urls.xml文件中保存的内容仅为:

<url>thisisfromread-host1.com</url>
<url>thisisfromread-host2.com</url>

那里有一件我想不到的简单事情。

1 个答案:

答案 0 :(得分:1)

$SecondURLName被定义为数组,因此您需要在循环中处理它。将变量放在一个字符串("$SecondURLName")中会将数组元素合并为一个字符串,因此最终会得到一个元素。但是,为了附加多个元素,首先需要添加根元素,因为XML文档不能有多个根元素。

$xml = New-Object System.XML.XMLDocument

$root = $xml.CreateElement('root')
$xml.AppendChild($root) | Out-Null

foreach ($url in $SecondURLName) {
  $newNode = $xml.CreateElement('url')
  $txt = $xml.CreateTextNode($url)
  $newNode.AppendChild($txt) | Out-Null
  $root.AppendChild($newNode) | Out-Null
}

$xml.Save('urls.xml')