【问题标题】:XML element takes a new lineXML 元素换行
【发布时间】:2015-08-13 13:29:10
【问题描述】:

我目前正在创建一个将 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、国家和 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>

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

有什么我错过的吗?或者我应该设置/设置不正确的格式参数?

【问题讨论】:

    标签: xml powershell csv


    【解决方案1】:

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

    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])
    }
    

    【讨论】:

    • 好吧,还有 45 分钟的调试,我再也回不来了
    猜你喜欢
    • 2011-07-07
    • 1970-01-01
    • 2015-03-02
    • 2018-03-06
    • 2020-01-18
    • 1970-01-01
    • 2017-09-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多