【问题标题】:How do I get different values from the same variable in XML using XSL如何使用 XSL 从 XML 中的同一变量中获取不同的值
【发布时间】:2017-03-31 19:28:11
【问题描述】:

XML:

<message code="100" description="checkSnr">
  <string name="id"/>
  <string name="serialNr"/>
</message>

XSL:

<xsl:template match="/">
  <xsl:for-each select="machine/events"> 
    <xsl:text>;</xsl:text>
    <xsl:value-of select="message/@code"/>
    <xsl:text>;</xsl:text>
    <xsl:value-of select="message/string/@name"  />
    <xsl:text>;</xsl:text>
    <xsl:value-of select="message/string/@name"  />
  </xsl:for-each>
</xsl:template>

所以这是我的问题。我的 XSL 文件应该检测到值“id”和值“serialNr”,但我的输出是“id”x2。我知道它只是逻辑的,但我如何才能真正更改我的 XSL 以便它给我两个值? (顺便说一句,在 XML 中有一些部分,其中变量“字符串名称”被使用了 4 次)我想用循环重写 XML,以便将名称变量重命名为 name1、name2、name3 等等,但我不知道该怎么做。如果您能想到 Java 中的任何解决方案,我会使用 Java 作为转换器。 如果重要的话,我的输出格式是 .CSV。

(也欢迎任何其他改进 XSL 的技巧)

谢谢!

【问题讨论】:

    标签: java xml xslt


    【解决方案1】:

    奇怪的是你有 2 个 empty string 标签。

    我想,您的 XML 应该具有以下形状:

    <message code="100" description="checkSnr">
      <string name="id">1234</string>
      <string name="serialNr">5678</string>
    </message>
    

    然后您应该使用具有特定值的name 属性读取string 两个标签作为谓词:

    <xsl:template match="/">
      <xsl:for-each select="machine/events"> 
        <xsl:text>;</xsl:text>
        <xsl:value-of select="message/@code"/>
        <xsl:text>;</xsl:text>
        <xsl:value-of select="message/string[@name='id']"  />
        <xsl:text>;</xsl:text>
        <xsl:value-of select="message/string[@name='serialNr']"  />
      </xsl:for-each>
    </xsl:template>
    

    【讨论】:

    • 首先感谢您的回答!实际上,我对形状之类的东西也有同样的想法。接下来是获取这些值,然后在 XSL 中使用它们,所以你的回答已经帮助了我。我目前的问题是,我必须从 xml 中获取主要结构。所需的 CSV 看起来像 code;id;serialNr 我将不得不添加 ... 稍后。但我需要以某种方式从我的 XML 中获取“code;id;...”才能将结构设为 CSV。
    猜你喜欢
    • 1970-01-01
    • 2016-11-02
    • 1970-01-01
    • 1970-01-01
    • 2019-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-13
    相关资源
    最近更新 更多