我目前正在创建一个将CSV文件转换为XML文档的脚本。我有以下内容:
function writeDoc(){
$XmlWriter.WriteStartElement("RootElement")
foreach($test in $csvFile)
{
$valueArr+= $test.id
$valueArr+=$test.first_name
$valueArr+= $test.last_name
$valueArr+= $test.email
$valueArr+= $test.country
$valueArr+= $test.ip_address
addElementToDoc("Person")
$valueArr = @()
}
# close root
$XmlWriter.WriteEndElement()
# close doc
$XmlWriter.WriteEndDocument()
$XmlWriter.Finalize
$XmlWriter.flush()
$XmlWriter.Close()
}
function addElementToDoc($elName)
{
$XmlWriter.WriteStartElement($elName)
for($i=0;$i -le $headerArr.Length; $i++)
{
$XmlWriter.WriteElementString($headerArr[$i], $valueArr[$i])
}
$XmlWriter.WriteEndElement()
}
function setupXmlWriter()
{
# set formatting
$XmlWriter.formatting = "Indented"
$XmlWriter.Indentation = "4"
#write xml declaration
$XmlWriter.WriteStartDocument()
#set the xsl
$XSLPropText = "type='text/xsl' href='style.xsl'"
$XmlWriter.WriteProcessingInstruction("xml-stylesheet", $XSLPropText)
}
csv包含列id,fname,lname,email,coutnry和ip地址。转换文档时,一切都很好,直到它到达IP地址。完成的元素最终看起来像这样:
<Person>
<id>2</id>
<first_name>Bonnie</first_name>
<last_name>Gomez</last_name>
<email>bgomez1@sogou.com</email>
<country>Portugal</country>
<ip_address
>165.233.249.20</ip_address
>
</Person>
有没有办法防止最后一个元素占用新行?我已经尝试运行addElementToDoc()
函数而不编写IP地址并且格式化很好,它只在编写器写入ip地址和值时才会发生。
有没有我错过的东西?或者我应该设置/设置不正确的格式参数?
答案 0 :(得分:2)
这里有一个数组越界错误:
for($i=0;$i -le $headerArr.Length; $i++)
{
$XmlWriter.WriteElementString($headerArr[$i], $valueArr[$i])
}
由于$i
(小于或等于,即&lt; =),0
从$headerArr.Length
到-le
。这可能会导致意外输出。
请改用:
for($i=0; $i -lt $headerArr.Length; $i++)
{
$XmlWriter.WriteElementString($headerArr[$i], $valueArr[$i])
}