【问题标题】:Trying to move data from XML to an Excel spreadsheet尝试将数据从 XML 移动到 Excel 电子表格
【发布时间】:2016-08-10 15:12:10
【问题描述】:

我正在尝试学习如何使用 PowerShell 来加快工作中的某些任务。

我的目标是获取一个列出有关产品的一些数据的 XML 文档,并从某个重复出现的子节点中获取数据并将其放入 Excel 中的新行中。

所以 XML 可能看起来像这样(包括“sequence”属性):

<xml>  
  <tracks> 
    <track sequence="1"> 
      <tracktitle>StuffIWant</tracktitle>
    </track>
    <track sequence="2">
      <tracktitle>StuffIWant2</tracktitle>
    </track>
    <track sequence="3">
      <tracktitle>StuffIWant3</tracktitle>
    </track>
  </tracks>
</xml> 

我想将每个tracktitle 放在excel 中的一行中。

我可以在 Excel 中放置一个特定的东西,比如xml.artist.artistname 等单个实体,但如果我想循环该过程以获取所有曲目,那么我不知道如何正确编写循环。我尝试了很多不同的东西,但这是我脑海中最有意义的东西($books 是我正在使用的 XML 文档):

$row = 5
foreach ($track in $books.tracks) {
  $track = $books.tracks.track.tracktitle
  $excelworksheet.cells.item($row, 2) = $track
  $row++
}

【问题讨论】:

    标签: xml excel powershell powershell-2.0


    【解决方案1】:
    • 您需要访问 xml 中的 track-property 才能实际获取轨道元素数组。 tracks 是单个节点,而它包含多个 track-元素(您可以作为数组访问)。
    • 您没有在循环中使用当前项目$track
    • $books.tracks 对包含的示例无效。您缺少 xml 根元素

    试试这个:

    $row = 5
    foreach ($track in $books.xml.tracks.track) {
        $title = $track.tracktitle
        $excelworksheet.cells.item($row, 2) = $title
        $row++
    }
    

    【讨论】:

    • 非常感谢您提供的信息!我有一个问题 - 我正在使用的 xml 文件实际上没有 &lt;xml&gt; 元素,是否仍然需要?我只是把它放在示例 xml 设置中,忘记在我的问题中添加它。
    • 另外-在您的示例中,系统如何知道 $track 指向 .track 节点?你能把第 3 行写成$blue = $blue.tracktitle 吗?还是名称实际上必须与 xml 节点匹配?
    • 如果真实文件中没有它,那么您不需要访问xml,但我不得不使用它,因为在您的示例输入中以这种方式构建了 xml-tree
    • 在循环的开始,$track 是当前的track-item,但我用轨道标题替换了$track 的值。现在将其更改为$title 以使其清楚(对不起,我的回答基本上是您的复制粘贴,所以我没有注意到)。 :-) xml 文件和变量名之间没有关系。变量可以任意命名。
    • 啊,好酷。是的,我看到的很多教程/示例都有与他们想要解决的任何内容相匹配的变量。当然,整洁和可读性是有道理的,但对于像我这样的菜鸟,我认为这是必需的,它让我失望。顺便说一句,您的回答完全符合我的要求!真是太感谢你了!
    猜你喜欢
    • 2021-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多