【问题标题】:XSLT - output select elements and skip restXSLT - 输出选择元素并跳过休息
【发布时间】:2018-03-23 08:56:15
【问题描述】:

我对 XSLT 很陌生。我正在尝试使用 XSLT 将 XML 转换为 CSV。我查看了各种可用的在线示例,并尝试自己弄清楚,但是我一直在努力获得所需的结果。任何帮助,将不胜感激。

现在是问题陈述。 我有以下要转换为 CSV 的 XML。这里的问题是我只想从选择节点及其子节点复制数据,而忽略其余节点。

<Employees>
  <Employee>
    <WorkInfo>
        <Skill>Java</Skill>
        <Experience>10</Experience>
        <PreviousCompany>XYZ</PreviousCompany>
    </workInfo>
    <PersonalInfo>
        <Name>John</Name>
        <LastName> Trevor</LastName>
        <Age>35</Age>
    </PersonalInfo>
  </Employee>
</Employees>

我只想打印节点 WorkInfo 及其子节点下的数据,而不打印 PersonalInfo 及其子节点。

我正在使用下面的 xslt

 <xsl:stylesheet version="1.0"
   xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:output method="text"/>
  <xsl:strip-space elements="*"/>

  <xsl:template match="/">
     <xsl:apply-templates select="workInfo"/>
     <xsl:apply-templates select="PersonalInfo"/>
  </xsl:template>

   <xsl:template match="workInfo">
     <xsl:copy-of select="."/>
     <xsl:if test="not(position()=last())">,</xsl:if>
    </xsl:template>

     <xsl:template match="PersonalInfo">
  </xsl:stylesheet>

但是我没有得到预期的输出,即

Java,10,XYZ

但最终得到一个空结果。请有人能帮我理解我哪里出错了。

谢谢, 零担

【问题讨论】:

  • 如果您有WorkInfo 元素,那么您需要匹配并选择该名称而不是workInfo。还有更多问题,例如输出子逗号分隔并确保WorkInfo选择了正确的路径(它不是文档节点的子节点)。

标签: xml xslt


【解决方案1】:

请修改 XSL 模板如下。您需要遍历WorkInfo 的所有子元素并使用&lt;xsl:value-of&gt; 输出它们的值。

<xsl:template match="Employee">
    <xsl:for-each select="WorkInfo/*">
        <xsl:value-of select="." />
        <xsl:if test="position() != last()">
            <xsl:text>,</xsl:text>
        </xsl:if>
    </xsl:for-each>
</xsl:template>

输出

Java,10,XYZ

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-09
    • 2014-07-09
    • 2021-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-03
    相关资源
    最近更新 更多