0

您好 XML 专家和专家。如果树是这样的,我有一个问题如何设置 xml 树的样式:

 1. ROW

Name
Surname
Type

 2. ROW

Name
Surname
Type

 3. ROW

ID
Name
Surname

我需要编写显示第 1 行(著名)和第 2 行(著名)的 xslt 代码,但没有显示第 3 行,并过滤树中没有 ID 字段的所有行,所以答案必须是代码将显示第 1 行和第 2 行。那么该怎么做呢?此处的代码示例:一些示例,我无法提供原始 xml 文件,因为它是安全信息。感谢您的回复尝试举个例子:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<?xml-stylesheet type="text/xsl" href="test.xsl" ?>
<testdocument>
<famous>
<name>Bob</name>
<surname>Bobby</surname>
<type>Human</type>
</famous>
<famous>
<name>Ted</name>
<surname>Teddy</surname>
<type>Human</type>
</famous>
<famous>
<name>Snake</name>
<surname>Anaconda</surname>
<type>Reptile</type>
<ID>ANIMAL</ID>
</famous>
</testdocument>

我需要输出第一和第二个著名的叶子,但不输出 ID 设置为某物的第三个叶子。所以我需要输出所有但不是著名的叶子 ID 设置为什么的地方,希望我问得正确。可能的输出:

Bob
Bobby
Human

Ted
Teddy
Human

就是这样。

这是我到目前为止的 XSLT:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:template match="/">

<html>
<head>
<title></title>
</head>
<body>
<!-- Here i think something must be written as condition that 
     ID field not be taken, and ROw3 name and surname not be shown too..-->
<xsl:for-each select="famous[ID != 0]"> 
<xsl:value-of select="NAME"/>
<xsl:value-of select="SURNAME"/>
<xsl:value-of select="TYPE"/>
</xsl:for-each>
</body>
</html>

</xsl:template>
</xsl:stylesheet>
4

1 回答 1

1

请尝试以下 XSLT:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
  <xsl:output method="html"/>
  <xsl:template match="/">
    <html>
      <head>
        <title></title>
      </head>
      <body>
        <xsl:apply-templates select="testdocument/famous[not(ID)]" />
        <pre>
          <xsl:apply-templates select="*" mode="print" />
        </pre>
      </body>
    </html>
  </xsl:template>

  <xsl:template match="famous">
    <xsl:apply-templates select="*" />
    <br />
  </xsl:template>

  <xsl:template match="famous/*">
    <xsl:value-of select="."/>
    <br />
  </xsl:template>

  <xsl:template match="*" mode="spaces">
    <xsl:text>&#xA0;&#xA0;&#xA0;</xsl:text>
  </xsl:template>

  <xsl:template match="*" mode="print">
    <xsl:apply-templates select="ancestor::*" mode="spaces" />
    <xsl:value-of select="concat('&lt;', local-name(), '&gt;')"/>
    <xsl:if test="*">
      <xsl:text>&#xA;</xsl:text>
    </xsl:if>

    <xsl:apply-templates select="node()" mode="print" />

    <xsl:if test="*">
      <xsl:apply-templates select="ancestor::*" mode="spaces" />
    </xsl:if>
    <xsl:value-of select="concat('&lt;/', local-name(), '&gt;')"/>
    <xsl:text>&#xA;</xsl:text>
  </xsl:template>

  <xsl:template match="text()[not(normalize-space())]" mode="print" />
</xsl:stylesheet>

对样本数据运行时的结果:

<html>
  <head>
    <META http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title></title>
  </head>
  <body>Bob<br>Bobby<br>Human<br><br>Ted<br>Teddy<br>Human<br><br><pre>&lt;testdocument&gt;
   &lt;famous&gt;
      &lt;name&gt;Bob&lt;/name&gt;
      &lt;surname&gt;Bobby&lt;/surname&gt;
      &lt;type&gt;Human&lt;/type&gt;
   &lt;/famous&gt;
   &lt;famous&gt;
      &lt;name&gt;Ted&lt;/name&gt;
      &lt;surname&gt;Teddy&lt;/surname&gt;
      &lt;type&gt;Human&lt;/type&gt;
   &lt;/famous&gt;
   &lt;famous&gt;
      &lt;name&gt;Snake&lt;/name&gt;
      &lt;surname&gt;Anaconda&lt;/surname&gt;
      &lt;type&gt;Reptile&lt;/type&gt;
      &lt;ID&gt;ANIMAL&lt;/ID&gt;
   &lt;/famous&gt;
&lt;/testdocument&gt;
</pre>
  </body>
</html>
于 2013-01-31T08:58:23.217 回答