Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.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
Xml 需要读取上一个节点';s子值以格式化当前节点';使用xsl的s值?_Xml_Templates_Xslt_Loops_Xmlnode - Fatal编程技术网

Xml 需要读取上一个节点';s子值以格式化当前节点';使用xsl的s值?

Xml 需要读取上一个节点';s子值以格式化当前节点';使用xsl的s值?,xml,templates,xslt,loops,xmlnode,Xml,Templates,Xslt,Loops,Xmlnode,在rowdata标记中显示rowdata的内容时,我需要使用formats标记 xml如下所示:“temp.xml” 标题1 标题2 标题3 I5 I3 F1.1 5. 33 2.11 34 12 239.81 我试过xsl是:“temp.xsl” :-: 我很抱歉发布全部内容。 我觉得我能得到一些帮助。在上面的xml中,我希望在显示Mydata/rowdata/value1时使用formats/value1。 上面的Xsl迭代标题块并在中显示标题。然后,每个块的第二个将遍历rowdat

在rowdata标记中显示rowdata的内容时,我需要使用formats标记

xml如下所示:“temp.xml”


标题1
标题2
标题3
I5
I3
F1.1
5.
33
2.11
34
12
239.81
我试过xsl是:“temp.xsl”


:-:
我很抱歉发布全部内容。 我觉得我能得到一些帮助。在上面的xml中,我希望在显示Mydata/rowdata/value1时使用formats/value1。 上面的Xsl迭代标题块并在
中显示标题。然后,每个块的第二个将遍历rowdata及其子项。 在显示子项时,我需要使用formats标记来显示rowdata的子项

上面的xsl将第三个标记FValue1的输出设置为:
“2.11:-:I5 I3 F1.1”
;但我的期望是:
“2.11:-:F1.1”
。如果我得到这个解决方案,我可以做剩下的。我知道只要修改内部for循环,这是可能的。但我没能做到

如果有人对如何做有建议,请帮助。
谢谢

如果样本数据没有过度简化,xslt可能会删除每个的
,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="html" indent="yes"/>

    <xsl:template match="/">
        <html>
            <body>
                <table border="1">
                    <xsl:apply-templates select="TITLES" />
                    <xsl:apply-templates />
                </table>
            </body>
        </html>
    </xsl:template>

    <xsl:template match="TITLES">
        <tr>
            <th><xsl:value-of select="./VALUE1" /></th>
            <th><xsl:value-of select="./VALUE2" /></th>
            <th><xsl:value-of select="./FVALUE1" /></th>
        </tr>
    </xsl:template>

    <xsl:template match="ROWDATA">
        <tr>
            <td>
                <xsl:value-of select="./VALUE1" />:-:<xsl:value-of select="//FORMATS/VALUE1" />
            </td>
            <td>
                <xsl:value-of select="./VALUE2" />:-:<xsl:value-of select="//FORMATS/VALUE2" />
            </td>
            <td>
                <xsl:value-of select="./FVALUE1" />:-:<xsl:value-of select="//FORMATS/FVALUE1" />
            </td>
        </tr>
    </xsl:template>

    <xsl:template match="MY_DATA">
        <xsl:apply-templates />
    </xsl:template>

</xsl:stylesheet>

:-:
:-:
:-:

是否可以显示您的预期输出,因为这会有很大帮助?另外,在XSLT中,有一个对格式化元素的引用,它不在输入示例中。谢谢我道歉!我现在看到了…@全部。预期的输出是这样的,MyData/Rowdata/FValue1将被格式化为Fx.1。输出表将包含所有行的第三个值,并且只有一个十进制值输出。就像我必须扩展到9个十进制值。如果我知道一种格式,我可以做其他格式。谢谢你的评论和支持。你能用预期的结果修改原来的问题,而不是把它放在评论里,因为那样读起来容易多了。谢谢请提供所需的确切输出,并解释转换规则。
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:msxsl="urn:schemas-microsoft-com:xslt">
  <xsl:template name="MY_TEMPLATE" match="/">
    <html>
      <body>
        <table border="1">
          <TR border="1">
            <xsl:for-each select="/ALL_DATA/TITLES/*">
              <th border="1">
                <xsl:value-of select="."/>
              </th>
            </xsl:for-each>
          </TR>
          <xsl:for-each select="/ALL_DATA/MY_DATA/ROWDATA">
            <TR>
              <xsl:for-each select="*">
                <TD width ="130">
                  <xsl:value-of select="."/>:-:
                  <xsl:variable name="cur_node_name" select="name(.)"/>
                  <xsl:for-each select="/ALL_DATA/FORMATS[name(.)]">
                   <!--<xsl:template match="$cur_node_name"> -->
                  <xsl:value-of select="."/>
                   <!--</xsl:template>-->
                </xsl:for-each>
                </TD>
              </xsl:for-each>
            </TR>
          </xsl:for-each>
        </table>
      </body>
    </html>
  </xsl:template>
</xsl:stylesheet>
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="html" indent="yes"/>

    <xsl:template match="/">
        <html>
            <body>
                <table border="1">
                    <xsl:apply-templates select="TITLES" />
                    <xsl:apply-templates />
                </table>
            </body>
        </html>
    </xsl:template>

    <xsl:template match="TITLES">
        <tr>
            <th><xsl:value-of select="./VALUE1" /></th>
            <th><xsl:value-of select="./VALUE2" /></th>
            <th><xsl:value-of select="./FVALUE1" /></th>
        </tr>
    </xsl:template>

    <xsl:template match="ROWDATA">
        <tr>
            <td>
                <xsl:value-of select="./VALUE1" />:-:<xsl:value-of select="//FORMATS/VALUE1" />
            </td>
            <td>
                <xsl:value-of select="./VALUE2" />:-:<xsl:value-of select="//FORMATS/VALUE2" />
            </td>
            <td>
                <xsl:value-of select="./FVALUE1" />:-:<xsl:value-of select="//FORMATS/FVALUE1" />
            </td>
        </tr>
    </xsl:template>

    <xsl:template match="MY_DATA">
        <xsl:apply-templates />
    </xsl:template>

</xsl:stylesheet>