按子标签排序XML文件?

时间:2014-03-08 20:13:12

标签: xml sorting

我不再是程序员了。 我正在使用我的Windows媒体中心PC,并试图减少mcechannelinfo.xml中的垃圾。

很容易删除其他提供商(我不使用的有线电视运营商),但现在我在我的提供商尝试排序/删除我没有得到的频道。

数据分类如下:

    <channel>
      <id>Atlanta, DISH Atlanta::ZBUSN::mcepg</id>
      <name>ZBUSN</name>
      <num>708</num>
      <subnum>0</subnum>
    </channel>
    <channel>
      <id>Atlanta, DISH Atlanta::KIDTV::mcepg</id>
      <name>KIDTV</name>
      <num>9394</num>
      <subnum>0</subnum>
    </channel>
    <channel>
      <id>Atlanta, DISH Atlanta::WSBK::mcepg</id>
      <name>WSBK</name>
      <num>8775</num>
      <subnum>0</subnum>
    </channel>
    <channel>
      <id>Atlanta, DISH Atlanta::BLOCK::mcepg</id>
      <name>BLOCK</name>
      <num>349</num>
      <subnum>0</subnum>
    </channel>

正如你所看到的,那是一团糟。它既不是按字母顺序排列的字母,也不是数字的数字!!

如何按名称对数据进行排序,甚至更好? 我可以访问一些工具 - Excel,记事本++,以及我抓到的另一个名为XMLMIND的程序......

请帮忙!

确定。我尝试了你的响应,它似乎没有用,所以我从XML的顶部粘贴一个更大的剪辑,这样你就可以看到所有内容。

?xml version="1.0" encoding="utf-8"?>
<Channels> 
 <category name="Atlanta, DISH Atlanta">
    <channel>
      <id>Atlanta, DISH Atlanta::ESPNA::mcepg</id>
      <name>ESPNA</name>
      <num>148</num>
      <subnum>0</subnum>
    </channel>
    <channel>
      <id>Atlanta, DISH Atlanta::FSP::mcepg</id>
      <name>FSP</name>
      <num>391</num>
      <subnum>0</subnum>
    </channel>
    <channel>
      <id>Atlanta, DISH Atlanta::ACMAX::mcepg</id>
      <name>ACMAX</name>
      <num>313</num>
      <subnum>0</subnum>
    </channel>
    <channel>
      <id>Atlanta, DISH Atlanta::TBSHD::mcepg</id>
      <name>TBSHD</name>
      <num>139</num>
      <subnum>0</subnum>
    </channel>

我们非常感谢您的协助。

1 个答案:

答案 0 :(得分:0)

您可以使用XSLT 1.0样式表。找到解析器并不难,甚至可以使用在线服务来处理它。

您没有发布格式正确的XML,因此我假设您有一个<channel>之上的父节点,我将其称为<channels>。所以我假设你的文件是这样的:

<?xml-stylesheet type="text/xsl" href="order-channels.xsl"?>
<channels>
      <channel>
        <id>Atlanta, DISH Atlanta::ZBUSN::mcepg</id>
        <name>ZBUSN</name>
        <num>708</num>
        <subnum>0</subnum>
      </channel>
  ...
</channels>

创建一个包含此XSL样式表的文件:

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

    <xsl:output indent="yes"/>
    <xsl:strip-space elements="*"/>

    <xsl:template match="channels">
        <xsl:copy>
            <xsl:apply-templates select="channel">
                <xsl:sort select="num"/>
            </xsl:apply-templates>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="node()|@*">
        <xsl:copy>
            <xsl:apply-templates select="node()|@*"/>
        </xsl:copy>
    </xsl:template>

</xsl:stylesheet>

现在,您可以使用XSLT处理器或服务,并使用样式表转换XML。生成的XML将按编号排序channel个节点。

您也可以使用this service进行试用。只需将源XML复制到XML文本框中,然后将XSL复制到XSL框中,然后按“Transform XML”。

您可以按不同的标准排序,将select中的<xsl:sort />属性替换为channel上下文中的其他字段。

(不要忘记我对您的XML源做出了假设;如果您发布的内容只是简化,您可能必须根据源XML进行调整。)