我需要从XML文件中查询(我在这里包含)
Link towards the xml file
我需要找到所有具有课程先决条件的课程,这些课程名为“埃里克”'
预期查询结果:
我尝试按步骤
工作我知道我需要找到所有具有先决条件的课程CS106A和CS106B
所以我尝试了
<?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>
但是这给了我
如果我尝试
<?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>
我只得到
所以我可以假设我的&#34;和&#34;不工作?
答案 0 :(得分:1)
编辑,重新查找具有名字作为先决条件的教授的课程
您可以使用xsl:key
创建索引查找,并将其用作模板的谓词:
<?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>
哪个吐出来:
<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&#39; 或&#39; CS106B&#39;作为先决条件。但显然上面的键查找解决了实际需求。
<xsl:template match="/">
<CoursesWithPrerequsiteOfEric>
<xsl:apply-templates select="//Course[Prerequisites/Prereq = 'CS106A' or
Prerequisites/Prereq = 'CS106B']"/>
</CoursesWithPrerequsiteOfEric>
</xsl:template>
重新:更多要求
嗯,你可以内联密钥,但它变得更难理解,IMO:
select="//Course[Prerequisites/Prereq = //Course[Instructors/Professor/First_Name='Eric']/@Number]"
重新计算 - 你需要了解xsl functions。
<xsl:value-of select="count(//Course[Prerequisites/Prereq = //Course[Instructors/Professor/First_Name='Eric']/@Number])"/>