代码之家  ›  专栏  ›  技术社区  ›  Siva Charan oggy

基于XML节点和使用XSLT的XML注释对XML文件进行排序

  •  0
  • Siva Charan oggy  · 技术社区  · 14 年前

    我需要根据XML节点对XML文件进行排序的帮助,另外一件事是我必须放置与该节点对应的注释标记。

    例如:输入XML文件是

    <?xml version="1.0" encoding="UTF-8"?>
    <!-- catalog main -->
    <catalog>
     <!-- first book id -->
     <book id="bk101">
      <!-- author name 1 -->
      <author>Gambardella, Matthew</author>
      <!-- title name 1 -->
      <title>XML Developer's Guide</title>
      <genre>Computer</genre>
      <!-- price 1 -->
      <price>44.95</price>
      <publish_date>2000-10-01</publish_date>
      <description>An in-depth look at creating applications 
          with XML.</description>
     </book>
     <Book id="bk102">
      <author>Ralls, Kim</author>
      <title>Midnight Rain</title>
      <genre>Fantasy</genre>
      <price>5.95</price>
      <publish_date>2000-12-16</publish_date>
      <description>A former architect battles corporate zombies, 
          an evil sorceress, and her own childhood to become queen 
          of the world.</description>
     </Book>
    
    
     <!-- languages -->
     <Languages>
      <!-- java comment -->
      <java>Galos, Mike</java>
      <c>Visual Studio 7: A Comprehensive Guide</c>
      <!-- dotnet comment -->
      <dotnet>Computer</dotnet>
      <!-- description -->
      <description>Microsoft Visual Studio 7 is explored in depth,
          looking at how Visual Basic, Visual C++, C#, and ASP+ are 
          integrated into a comprehensive development 
          environment.</description>
     </Languages>
    
     <!-- ABC book -->
     <ABC>
      <!-- ABC author -->
      <author1>Galos, Mike</author1>
      <title1>Visual Studio 7: A Comprehensive Guide</title1>
      <!-- ABC genre -->
      <genre1>Computer</genre1>
      <price1>49.95</price1>
      <publish_date>2001-04-16</publish_date>
      <!-- ABC description -->
      <description>Microsoft Visual Studio 7 is explored in depth,
          looking at how Visual Basic, Visual C++, C#, and ASP+ are 
          integrated into a comprehensive development 
          environment.</description>
     </ABC>
     <!-- ABC1 book -->
     <abc1>
      <!-- ABC1 author -->
      <author1>Galos, Mike</author1>
      <title1>Visual Studio 7: A Comprehensive Guide</title1>
      <!-- ABC1 genre -->
      <genre1>Computer</genre1>
      <price1>49.95</price1>
      <publish_date>2001-04-16</publish_date>
      <!-- ABC1 description -->
      <description>Microsoft Visual Studio 7 is explored in depth,
          looking at how Visual Basic, Visual C++, C#, and ASP+ are 
          integrated into a comprehensive development 
          environment.</description>
     </abc1>
    </catalog>
    

    预期的输出XML文件应为:

    <?xml version="1.0" encoding="UTF-8"?>
    <!-- catalog main -->
    <catalog>
     <!-- ABC book -->
     <ABC>
      <!-- ABC author -->
      <author1>Galos, Mike</author1>
      <!-- ABC description -->
      <description>Microsoft Visual Studio 7 is explored in depth,
          looking at how Visual Basic, Visual C++, C#, and ASP+ are 
          integrated into a comprehensive development 
          environment.</description>
      <!-- ABC genre -->
      <genre1>Computer</genre1>
      <price1>49.95</price1>
      <publish_date>2001-04-16</publish_date>
      <title1>Visual Studio 7: A Comprehensive Guide</title1>
     </ABC>
     <!-- ABC1 book -->
     <abc1>
      <!-- ABC1 author -->
      <author1>Galos, Mike</author1>
      <!-- ABC1 description -->
      <description>Microsoft Visual Studio 7 is explored in depth,
          looking at how Visual Basic, Visual C++, C#, and ASP+ are 
          integrated into a comprehensive development 
          environment.</description>
      <!-- ABC1 genre -->
      <genre1>Computer</genre1>
      <price1>49.95</price1>
      <publish_date>2001-04-16</publish_date>
      <title1>Visual Studio 7: A Comprehensive Guide</title1>
     </abc1>
     <!-- first book id -->
     <book id="bk101">
      <!-- author name 1 -->
      <author>Gambardella, Matthew</author>
      <description>An in-depth look at creating applications 
          with XML.</description>
      <genre>Computer</genre>
      <!-- price 1 -->
      <price>44.95</price>
      <publish_date>2000-10-01</publish_date>
      <!-- title name 1 -->
      <title>XML Developer's Guide</title>
     </book>
     <Book id="bk102">
      <author>Ralls, Kim</author>
      <description>A former architect battles corporate zombies, 
          an evil sorceress, and her own childhood to become queen 
          of the world.</description>
      <genre>Fantasy</genre>
      <price>5.95</price>
      <publish_date>2000-12-16</publish_date>
      <title>Midnight Rain</title>
     </Book>
     <!-- languages -->
     <Languages>
      <c>Visual Studio 7: A Comprehensive Guide</c>
      <!-- description -->
      <description>Microsoft Visual Studio 7 is explored in depth,
          looking at how Visual Basic, Visual C++, C#, and ASP+ are 
          integrated into a comprehensive development 
          environment.</description>
      <!-- dotnet comment -->
      <dotnet>Computer</dotnet>
      <!-- java comment -->
      <java>Galos, Mike</java>
     </Languages>
    </catalog>
    
    2 回复  |  直到 14 年前
        1
  •  2
  •   user357812    14 年前

    此样式表:

    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
        <xsl:strip-space elements="*"/>
        <xsl:template match="*|@*">
            <xsl:copy-of select="preceding-sibling::node()[1]/self::comment()"/>
            <xsl:copy>
                <xsl:apply-templates select="@*"/>
                <xsl:apply-templates select="node()">
                    <xsl:sort select="name()"/>
                </xsl:apply-templates>
            </xsl:copy>
        </xsl:template>
    </xsl:stylesheet>
    

    输出:

    <!-- catalog main -->
    <catalog>
        <!-- ABC book -->
        <ABC>
            <!-- ABC author -->
            <author1>Galos, Mike</author1>
            <!-- ABC description -->
            <description>Microsoft Visual Studio 7 is explored in depth,
          looking at how Visual Basic, Visual C++, C#, and ASP+ are
          integrated into a comprehensive development
          environment.</description>
            <!-- ABC genre -->
            <genre1>Computer</genre1>
            <price1>49.95</price1>
            <publish_date>2001-04-16</publish_date>
            <title1>Visual Studio 7: A Comprehensive Guide</title1>
        </ABC>
        <!-- ABC1 book -->
        <abc1>
            <!-- ABC1 author -->
            <author1>Galos, Mike</author1>
            <!-- ABC1 description -->
            <description>Microsoft Visual Studio 7 is explored in depth,
          looking at how Visual Basic, Visual C++, C#, and ASP+ are
          integrated into a comprehensive development
          environment.</description>
            <!-- ABC1 genre -->
            <genre1>Computer</genre1>
            <price1>49.95</price1>
            <publish_date>2001-04-16</publish_date>
            <title1>Visual Studio 7: A Comprehensive Guide</title1>
        </abc1>
        <!-- first book id -->
        <book id="bk101">
            <!-- author name 1 -->
            <author>Gambardella, Matthew</author>
            <description>An in-depth look at creating applications
          with XML.</description>
            <genre>Computer</genre>
            <!-- price 1 -->
            <price>44.95</price>
            <publish_date>2000-10-01</publish_date>
            <!-- title name 1 -->
            <title>XML Developer's Guide</title>
        </book>
        <Book id="bk102">
            <author>Ralls, Kim</author>
            <description>A former architect battles corporate zombies,
          an evil sorceress, and her own childhood to become queen
          of the world.</description>
            <genre>Fantasy</genre>
            <price>5.95</price>
            <publish_date>2000-12-16</publish_date>
            <title>Midnight Rain</title>
        </Book>
        <!-- languages -->
        <Languages>
            <c>Visual Studio 7: A Comprehensive Guide</c>
            <!-- description -->
            <description>Microsoft Visual Studio 7 is explored in depth,
          looking at how Visual Basic, Visual C++, C#, and ASP+ are
          integrated into a comprehensive development
          environment.</description>
            <!-- dotnet comment -->
            <dotnet>Computer</dotnet>
            <!-- java comment -->
            <java>Galos, Mike</java>
        </Languages>
    </catalog>
    
        2
  •  0
  •   Siva Charan oggy    14 年前

    似乎我已经通过一个附加的实现解决了这个问题。
    以下是新代码:

    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
        <xsl:strip-space elements="*"/>
        <xsl:template match="*|@*">
            <xsl:copy-of select="preceding-sibling::node()[1]/self::comment()"/>
            <xsl:copy>
                <xsl:apply-templates select="@*"/>
                <xsl:apply-templates select="node()">
                    <xsl:sort select="name()"/>
                    <xsl:sort select="@*"/>
                </xsl:apply-templates>
            </xsl:copy>
        </xsl:template>
    </xsl:stylesheet>