【问题标题】:Import specific fields from XML file从 XML 文件导入特定字段
【发布时间】:2013-06-04 16:24:14
【问题描述】:

我有一个非常密集的 XML 文件,平均有 116 列和 700 多行,有时更多有时更少。目前我们处理此 XML 文件的唯一方法是将其导入 Excel,删除不需要的列和行,然后从那里操作数据。

我正在寻找一种更好的方法,理想情况下我只想引入 10 列(每列由名称定义)并忽略其余的多余数据。有没有办法通过程序或编码方式做到这一点?我快速浏览了 XSLT,但不知道从哪里开始。

这里是示例文件Click Here

我只需要以下字段,

ns1:ActivityNumber2 ns1:Status ns1:ActivityDate ns1:TypeCodeName ns1:LandId3 ns1:ServiceClientName ns1:ActivityNumber6 ns1:ClientName8 ns1:LtoPlanNumber

ns1:ActivityNumber6 ns1:ClientName8 有时可能出于某种未知原因分别命名为 7 和 9

【问题讨论】:

    标签: xml database excel xslt import


    【解决方案1】:

    一种方法是在您的 XSLT 中使用两个模板:一个按原样将所有内容从源复制到目标,另一个删除除您指定的元素之外的所有内容。

    例如,如果我只想保留此类文档中的根元素 <fieldToKeep1><fieldToKeep2>,则执行此操作的 XSLT 基础可能如下所示:

    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
      <xsl:output omit-xml-declaration="no" indent="yes"/>
      <xsl:strip-space elements="*"/>
    
      <xsl:template match="@*|node()">
        <xsl:copy>
          <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
      </xsl:template>
    
      <xsl:template
        match="*[not(
                 contains(
                   '|rootElement|fieldToKeep1|fieldToKeep2|',
                   concat('|', name(), '|')
                 )
               )]" />
    
    </xsl:stylesheet>
    

    我喜欢这种方法,因为如果您需要保留其他字段,您可以简单地修改 |fieldToKeep1|fieldToKeep2| 字符串以包含您想要的元素。同样,这是一个基础,可能需要针对您的具体示例进行修改。

    【讨论】:

    • 这是一个示例文件filedropper.com/plsrtwp059-10w5 我只需要以下字段 ns1:ActivityNumber2 ns1:Status ns1:ActivityDate ns1:TypeCodeName ns1:LandId3 ns1:ServiceClientName ns1:ActivityNumber6 ns1:ClientName8 ns1:LtoPlanNumber
    • ns1:ActivityNumber6 ns1:ClientName8 也可以分别为 7 和 9,原因不明
    • @mbmiller34 - 我上面的解决方案应该让您了解如何使用 XSLT 来解决您的实际示例。在您尝试解决问题时随时提出新问题,社区会提供帮助。
    • 我从哪里开始学习一些关于如何应用这个概念的基础知识?我可以轻松地为我的变量修改上述内容,但我不知道如何使用它。如果我有一个可行的例子,我可以把它拼凑起来。如果我需要将以上内容放入 .xslt 文件并通过另一个程序运行,或者我必须将以上内容放入现有文件中,我不需要。
    猜你喜欢
    • 1970-01-01
    • 2011-11-01
    • 2016-02-08
    • 2021-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多