0

我正在尝试创建一个循环通过此 XML 文件的 XSL 文件。

XML:

<ArrayOfCourse xmlns="http://schemas.datacontract.org/2004/07/Demo.Samples" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<Course>
<codeField>COMPSCI 101</codeField>
<semesterField>Summer School; Semester 1; Semester 2</semesterField>
<titleField>Principles of Programming</titleField>
</Course>
</ArrayOfCourse>

这就是我想出的,如果我将 ArrayOfCourse 标签更改为<ArrayOfCourse>(删除 xmlns),效果很好。

XSL:

<?xml version="1.0"?>
    <xsl:stylesheet version="1.0"
          xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >

      <xsl:template match="/">
        <HTML>
          <BODY>
              <xsl:for-each select="ArrayOfCourse/Course">
                <xsl:sort select="state" order="descending"/>
                <xsl:sort select="name"/>
                <xsl:value-of select="codeField" />:
                <b><xsl:value-of select="titleField" /> </b><br/>
                <xsl:value-of select="semesterField" /> <br/><br/>
              </xsl:for-each>
          </BODY>
        </HTML>
      </xsl:template>

    </xsl:stylesheet>

我该怎么做才能使它与xmlns="..."仍在代码中的部分正常工作?

4

1 回答 1

0

由于您使用的是 XSLT 1.0,因此您需要:

  • 使用前缀声明命名空间并在您的 xpath 中使用该前缀。(推荐

或者

  • 在谓词中使用local-name()namespace-uri()(可选)。(例如:*[local-name()='Course'].

使用前缀声明命名空间的 XSLT 示例ds(前缀可以是任何东西,不需要匹配输入中的前缀(如果有的话)):

<xsl:stylesheet version="1.0"
    xmlns:ds="http://schemas.datacontract.org/2004/07/Demo.Samples"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >

    <xsl:template match="/">
        <HTML>
            <BODY>
                <xsl:for-each select="ds:ArrayOfCourse/ds:Course">
                    <xsl:sort select="ds:state" order="descending"/>
                    <xsl:sort select="ds:name"/>
                    <xsl:value-of select="ds:codeField" />:
                    <b><xsl:value-of select="ds:titleField" /> </b><br/>
                    <xsl:value-of select="ds:semesterField" /> <br/><br/>
                </xsl:for-each>
            </BODY>
        </HTML>
    </xsl:template>

</xsl:stylesheet>

谷歌xslt default namespace了解更多信息。

于 2013-09-11T06:18:18.480 回答