如何使用 xslt 获取 XML 的属性值和代码作为 html 的值

Posted

技术标签:

【中文标题】如何使用 xslt 获取 XML 的属性值和代码作为 html 的值【英文标题】:How to get attribute values of an XML and code as thead values for html using xslt 【发布时间】:2021-09-16 17:12:08 【问题描述】:

我目前正在使用 XSLT 从 XML 文档中提取值并创建新的 html 文档。我的部分 xml,XSLT 代码如下。我不知道如何从xml的属性值中显示html的thead值:

源xml:

<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="test.xslt"?>
<Summary>
  <test name="test">
    <xml_name name="ABC">
        <version num="1.0">
            <component name="APPS">
                <componenet_ver>104</componenet_ver>
            </component>
        <component name="Ner">
            <componenet_ver>1.0</componenet_ver>
            </component>
            <component name="HUNE">
                <componenet_ver>003</componenet_ver>
            </component>
            <component name="FADA">
                <componenet_ver>107</componenet_ver>
            </component>
            <component name="VEDA">
                <componenet_ver>8.8</componenet_ver>
            </component>
        </version>
    </xml_name>
  </test>
</Summary>

我试过的 XSLT 文件:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
  <html>
  <body>
    <h2>Compo. Name and Versions</h2>
    <table border="1">
      <tr bgcolor="#9acd32">
        <th><xsl:value-of select="/Summary/test/xml_name"/></th>    ### this line
        <th><xsl:value-of select="/Summary/test/xml_name/version"/></th>    ###  and this line
      </tr>
          <xsl:for-each select="/Summary/test/xml_name/version/component">
                  <tr>
                    <td><xsl:value-of select="@name"/></td>
                    <td><xsl:value-of select="componenet_ver"/></td>
                  </tr>
            </xsl:for-each>
    </table>
  </body>
  </html>
</xsl:template>
</xsl:stylesheet>

获取 o/p:

预期输出:

【问题讨论】:

【参考方案1】:

您没有在 XPath 表达式中指定属性。 所以只需使用以下代码:

<xsl:template match="/">
  <html>
  <body>
    <h2>Compo. Name and Versions</h2>
    <table border="1">
      <tr bgcolor="#9acd32">
        <th><xsl:value-of select="/Summary/test/xml_name/@name"/></th>
        <th><xsl:value-of select="/Summary/test/xml_name/version/@num"/></th>
      </tr>
      <xsl:for-each select="/Summary/test/xml_name/version/component">
        <tr>
          <td><xsl:value-of select="@name"/></td>
          <td><xsl:value-of select="componenet_ver"/></td>
        </tr>
      </xsl:for-each>
    </table>
  </body>
  </html>
</xsl:template>

它的输出应该和预期的一样:

【讨论】:

@ikegami:是的,我也猜到了。我一直不确定我是否应该提及它。但是因为这显然是错误的决定,所以我现在删除了它。

以上是关于如何使用 xslt 获取 XML 的属性值和代码作为 html 的值的主要内容,如果未能解决你的问题,请参考以下文章

如何通过abap中的XSLT程序读取XML文件的属性

XSLT:XML 第一个属性需要转换为具有第二个属性值的元素

想要使用 XSLT 从 Xml 属性中获取价值

使用 Java 解析 XML 并获取元素值和属性值

获取元素的值并使其成为 XSLT 中属性的值?

Xml 到 XSLT:获取属性值等等