Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用XSL从XML中的同一变量中获取不同的值_Java_Xml_Xslt - Fatal编程技术网

Java 如何使用XSL从XML中的同一变量中获取不同的值

Java 如何使用XSL从XML中的同一变量中获取不同的值,java,xml,xslt,Java,Xml,Xslt,XML: XSL: ; ; ; 这就是我的问题。我的XSL文件应该检测值“id”和值“serialNr”,但我的输出是“id”x2。我知道这是合乎逻辑的,但如何才能真正更改XSL,使其同时提供这两个值呢?(顺便说一句,在XML中有一些部分,变量“string Name”被使用了4次)我想用一个循环重写XML,以便将名称变量重命名为name1、name2、name3等等,但我不知道如何做到这一点。如果您能想到Java中的任何解决方案,我将Java用作转换器。 如果有必要,我的输出格式是.C

XML:


XSL:


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

(关于改进XSL的任何其他提示也值得赞赏)


谢谢

奇怪的是,您有两个空的
字符串
标记

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

<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中使用它们,所以您的回答已经帮了我的忙。目前我的问题是,我必须从xml中获取主结构。所需的CSV看起来像代码;身份证件我将不得不添加。。。后来。但我需要以某种方式从XML中获取“code;id;…”以获得CSV结构。
<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>
<message code="100" description="checkSnr">
  <string name="id">1234</string>
  <string name="serialNr">5678</string>
</message>
<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>