首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我的xml查询不能工作?

为什么我的xml查询不能工作?
EN

Stack Overflow用户
提问于 2015-01-08 15:15:07
回答 1查看 68关注 0票数 1

我需要从XML文件(这里包括的) 链接到xml文件。查询

我需要找到所有的课程,这些课程都是由一位名叫“Eric”的牧师开设的课程的先决条件。

预期查询结果:

  1. 程序抽象
  2. 计算机组织与系统
  3. 计算机科学家概论
  4. 数字系统II

我试着分步骤工作

我知道我需要找到所有有CS106A和CS106B先决条件的课程

所以我试着

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<Course_Catalog>
  <xsl:copy-of select="//Course[Prerequisites/Prereq = 'CS106B' and 'CS106A']/Title"/>
</Course_Catalog>
</xsl:template>
</xsl:stylesheet>

但这就是我

  1. 计算机组织与系统
  2. 计算机科学家概论
  3. 数字系统II

如果我试着

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<Course_Catalog>
  <xsl:copy-of select="//Course[Prerequisites/Prereq = 'CS106A' and 'CS106B']/Title"/>
</Course_Catalog>
</xsl:template>
</xsl:stylesheet>

我只得到

  1. 程序抽象

这样我就可以假设我的“和”不起作用了?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-08 15:24:19

编辑,重新找到以教授名字为前提的课程

您可以使用xsl:key创建索引查找,并将其用作模板中的谓词:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes"/>

  <xsl:key name="ProfLookup"
           match="//Course"
           use="@Number"/>

  <xsl:template match="/">
    <CoursesWithPrerequsiteOfEric>
      <xsl:apply-templates select="//Course[key('ProfLookup', 
          Prerequisites/Prereq)/Instructors/Professor/First_Name='Eric']"/>
    </CoursesWithPrerequsiteOfEric>
  </xsl:template>

  <xsl:template match="Course">
    <Course>
      <xsl:value-of select="Title"/>
    </Course>
  </xsl:template>

</xsl:stylesheet>

它喷出:

代码语言:javascript
复制
<CoursesWithPrerequsiteOfEric>
  <Course>Programming Abstractions</Course>
  <Course>Computer Organization and Systems</Course>
  <Course>Introduction to Probability for Computer Scientists</Course>
  <Course>Digital Systems II</Course>
</CoursesWithPrerequsiteOfEric>

编辑

抱歉,没有先摸一下原来的要求。当然,您的中间步骤是找到所有以'CS106A‘ 'CS106B’作为先决条件的课程。但是很明显,上面的密钥查找解决了实际的需求。

代码语言:javascript
复制
<xsl:template match="/">
 <CoursesWithPrerequsiteOfEric>
   <xsl:apply-templates select="//Course[Prerequisites/Prereq = 'CS106A' or
                                         Prerequisites/Prereq = 'CS106B']"/>
 </CoursesWithPrerequsiteOfEric>
</xsl:template>

Re :更多需求

好吧,你可以插上钥匙,但它变得更难理解,海事组织:

代码语言:javascript
复制
select="//Course[Prerequisites/Prereq = //Course[Instructors/Professor/First_Name='Eric']/@Number]"

而且还在数数--你需要刷一下你的xsl函数

代码语言:javascript
复制
<xsl:value-of select="count(//Course[Prerequisites/Prereq = //Course[Instructors/Professor/First_Name='Eric']/@Number])"/>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27843367

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档