XML 元素换行

标签 xml powershell csv

我当前正在创建一个脚本,用于将 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><a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="197b7e76747c6328596a767e766c377a7674" rel="noreferrer noopener nofollow">[email protected]</a></email>
        <country>Portugal</country>
        <ip_address
>165.233.249.20</ip_address
>
    </Person>

有没有办法防止最后一个元素换行?我尝试在不写入 ip 地址的情况下运行 addElementToDoc() 函数,并且格式很好,它仅在作者写入 ip 地址和值时发生。

我是不是漏掉了什么?或者也许我应该设置/设置不正确的格式参数?

最佳答案

这里有一个数组越界错误:

for($i=0;$i -le $headerArr.Length; $i++)
{
    $XmlWriter.WriteElementString($headerArr[$i], $valueArr[$i])
}

由于$i0运行到$headerArr.Length,因为-le(更少或等于,即 <=)。这可能会导致意外的输出。

改用这个:

for($i=0; $i -lt $headerArr.Length; $i++)
{
    $XmlWriter.WriteElementString($headerArr[$i], $valueArr[$i])
}

关于XML 元素换行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31989665/

相关文章:

c# - XSLt.transform 给我 ""

python - 替换csv文件python的第一行

python - 如何在微服务中存储版本化的 XSLT 文件

android - 安卓编码标准

windows - 如何从 Powershell 脚本切换目录的加密属性?

windows - 升级到 WSL 2 时出错 : There are no more endpoints available from the endpoint mapper

xml - 来自另一个文件的 PowerShell XML 节点

php - 如何从 magento 1 模板调用 block 方法

powershell - Azure VM 设置中的 DefaultWinRMCertificateThumbprint 字段为空

csv - 将慢日志发送到 .csv 文件?