XSL 转换帮助

发布于 2024-10-21 19:12:53 字数 755 浏览 2 评论 0原文

我当前有以下 XML 文件:

<Regions>
  <Region>
     <Code>AU</Code>
     <Name>Austria</Name>
  </Region>
</Regions>
<Channels>
    <Channel>
      <Code>00</Code>
      <Name>Im a channel</Name>
    </Channel>
    ...
</Channels>
<Programs>
   <Program>
      <Code>00</Code>
      <Name>Program</Name>          
   </Program>
</Programs>

我只想保留 Channels 路径,以便使用 XSLT 时输出如下所示:

<Channels>
    <Channel>
      <Code>00</Code>
      <Name>Im a channel</Name>
    </Channel>
    ...
</Channels>

I currently have the following XML file:

<Regions>
  <Region>
     <Code>AU</Code>
     <Name>Austria</Name>
  </Region>
</Regions>
<Channels>
    <Channel>
      <Code>00</Code>
      <Name>Im a channel</Name>
    </Channel>
    ...
</Channels>
<Programs>
   <Program>
      <Code>00</Code>
      <Name>Program</Name>          
   </Program>
</Programs>

I would only like to keep the Channels path so that the output would look like this using an XSLT:

<Channels>
    <Channel>
      <Code>00</Code>
      <Name>Im a channel</Name>
    </Channel>
    ...
</Channels>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

大姐,你呐 2024-10-28 19:12:53

此转换:

<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="node()|@*">
     <xsl:copy>
       <xsl:apply-templates select="node()|@*"/>
     </xsl:copy>
 </xsl:template>

 <xsl:template match="/*">
  <xsl:apply-templates/>
 </xsl:template>

 <xsl:template match="/t/*[not(self::Channels)]"/>
</xsl:stylesheet>

当应用于提供的 XML 文档时(固定为格式良好):

<t>
    <Regions>
        <Region>
            <Code>AU</Code>
            <Name>Austria</Name>
        </Region>
    </Regions>
    <Channels>
        <Channel>
            <Code>00</Code>
            <Name>Im a channel</Name>
        </Channel>    
    </Channels>
    <Programs>
        <Program>
            <Code>00</Code>
            <Name>Program</Name>
        </Program>
    </Programs>
</t>

产生所需的正确结果:

<Channels>
   <Channel>
      <Code>00</Code>
      <Name>Im a channel</Name>
   </Channel>
</Channels>

说明

使用身份规则,覆盖顶部元素(传递)和顶部元素的任何非Channels子元素(删除)。

This transformation:

<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="node()|@*">
     <xsl:copy>
       <xsl:apply-templates select="node()|@*"/>
     </xsl:copy>
 </xsl:template>

 <xsl:template match="/*">
  <xsl:apply-templates/>
 </xsl:template>

 <xsl:template match="/t/*[not(self::Channels)]"/>
</xsl:stylesheet>

when applied on the provided XML document (fixed to be made well-formed):

<t>
    <Regions>
        <Region>
            <Code>AU</Code>
            <Name>Austria</Name>
        </Region>
    </Regions>
    <Channels>
        <Channel>
            <Code>00</Code>
            <Name>Im a channel</Name>
        </Channel>    
    </Channels>
    <Programs>
        <Program>
            <Code>00</Code>
            <Name>Program</Name>
        </Program>
    </Programs>
</t>

produces the wanted, correct result:

<Channels>
   <Channel>
      <Code>00</Code>
      <Name>Im a channel</Name>
   </Channel>
</Channels>

Explanation:

Use of the identity rule, overriden for the top element (pass-through) and for any non-Channels children of the top element (delete).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文