【问题标题】:How Get distinct value node XML如何获取不同的值节点 XML
【发布时间】:2012-11-12 09:38:41
【问题描述】:

我是 XML 的新手,所以希望您能有所帮助。 我有以下 XML:

<?xml version="1.0" encoding="UTF-8"?>
    <Students> -<Student Id="001">
        <Name>Peter</Name>
        <LastName>Kohen</LastName> -<Courses> -<Course Id="01">
                <Name>C#</Name>
            </Course> -<Course Id="02">
                <Name>Java</Name>
            </Course>
        </Courses>
    </Student> -<Student Id="002">
        <Name>Nick</Name>
        <LastName>Nikes</LastName> -<Courses> -<Course Id="02">
                <Name>Java</Name>
            </Course> -<Course Id="03">
                <Name>Oracle</Name>
            </Course>
        </Courses>
    </Student> -<Student Id="003">
        <Name>Rafi</Name>
        <LastName>rafifa</LastName> -<Courses> -<Course Id="02">
                <Name>Java</Name>
            </Course> -<Course Id="03">
                <Name>Oracle</Name>
            </Course>
        </Courses>
    </Student> -<Student Id="004">
        <Name>Yosi</Name>
        <LastName>Koen</LastName> -<Courses> -<Course Id="04">
                <Name>SQL</Name>
            </Course> -<Course Id="03">
                <Name>Oracle</Name>
            </Course>
        </Courses>
    </Student>
</Students>

我需要知道两件事:

  1. 所有课程
  2. 以及每门课程有多少学生学习。

【问题讨论】:

  • 你好,你用什么编程语言?
  • 您能否将您的 XML 发布为 XML 代码(缩进以获取代码标签)。此外,您应该说明您想使用什么来获取数据,由于您的标签,我假设 XPath,如果是,请说明。另外,到目前为止,您尝试过什么?

标签: xml xpath distinct


【解决方案1】:

纯粹的 XPath 1.0
特色课程:

//Course[not(preceding::Course/@Id = @Id)]

【讨论】:

    【解决方案2】:

    我需要知道两件事: 1.所有课程

    使用

    /*/*/Courses/Course[not(Name = preceding::Course/Name)]
    

    2.每门课程有多少学生。

    对于给定的课程使用

    count(/*/Student[Courses/Course/@Id = $vCourseId])
    

    $vCourseId 必须替换为实际的课程 ID。

    基于 XSLT 的验证

    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
     <xsl:output omit-xml-declaration="yes" indent="yes"/>
     <xsl:strip-space elements="*"/>
    
     <xsl:template match="/">
         <xsl:copy-of select=
         "/*/*/Courses/Course[not(Name = preceding::Course/Name)]"/>
         ===============
         <xsl:for-each select=
         "/*/*/Courses/Course[not(Name = preceding::Course/Name)]">
    
         <xsl:variable name="vCourseId" select="@Id"/>
    
         Course Id = <xsl:value-of select="@Id"/>, Students = <xsl:text/>
         <xsl:value-of select="count(/*/Student[Courses/Course/@Id = $vCourseId])"/>
         </xsl:for-each>
     </xsl:template>
    </xsl:stylesheet>
    

    当此转换应用于提供的 XML 文档时:

    <Students> -
        <Student Id="001">
            <Name>Peter</Name>
            <LastName>Kohen</LastName> -
            <Courses> -
                <Course Id="01">
                    <Name>C#</Name>
                </Course> -
                <Course Id="02">
                    <Name>Java</Name>
                </Course>
            </Courses>
        </Student> -
        <Student Id="002">
            <Name>Nick</Name>
            <LastName>Nikes</LastName> -
            <Courses> -
                <Course Id="02">
                    <Name>Java</Name>
                </Course> -
                <Course Id="03">
                    <Name>Oracle</Name>
                </Course>
            </Courses>
        </Student> -
        <Student Id="003">
            <Name>Rafi</Name>
            <LastName>rafifa</LastName> -
            <Courses> -
                <Course Id="02">
                    <Name>Java</Name>
                </Course> -
                <Course Id="03">
                    <Name>Oracle</Name>
                </Course>
            </Courses>
        </Student> -
        <Student Id="004">
            <Name>Yosi</Name>
            <LastName>Koen</LastName> -
            <Courses> -
                <Course Id="04">
                    <Name>SQL</Name>
                </Course> -
                <Course Id="03">
                    <Name>Oracle</Name>
                </Course>
            </Courses>
        </Student>
    </Students>
    

    计算两个 XPath 表达式(每门课程重复第二个),并将这些计算的结果复制到输出

    <Course Id="01">
       <Name>C#</Name>
    </Course>
    <Course Id="02">
       <Name>Java</Name>
    </Course>
    <Course Id="03">
       <Name>Oracle</Name>
    </Course>
    <Course Id="04">
       <Name>SQL</Name>
    </Course>
         ===============
    
    
         Course Id = 01, Students = 1
    
         Course Id = 02, Students = 3
    
         Course Id = 03, Students = 3
    
         Course Id = 04, Students = 1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-23
      • 2013-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-09
      • 2013-08-12
      相关资源
      最近更新 更多