【问题标题】:XSLT with namespace in root element [duplicate]XSLT 在根元素中具有命名空间 [重复]
【发布时间】:2016-03-24 17:49:25
【问题描述】:

我一直在修补这个问题太久了,似乎无法在任何地方找到答案——或者我可能不知道如何措辞这些问题。

我有一个表示站点地图的 XML 文件。

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
   <url>
      <loc>http://...</loc>
      <pagetitle>English</pagetitle>
      <children>
         <url>
            <loc>http://...</loc>
            <pagetitle>page title</pagetitle>
         </url>
         <children>
            ...

此 XML 表示站点地图。我写了一个 XSLT 来把它变成一个分层列表。

<?xml version="1.0" encoding="UTF-8"?>

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

    <xsl:output method="html" indent="yes" version="4.0"/>

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

    <xsl:template match="url">
        <li><a href="{loc}"><xsl:value-of select="pagetitle"/></a></li>
        <xsl:apply-templates select="children"/>
    </xsl:template>

    <xsl:template match="children">
        <ul><xsl:apply-templates select="url"/></ul>
    </xsl:template>

</xsl:stylesheet>

当我有&lt;urlset xmlns="..&gt; 时,此样式表不起作用,但如果我将节点更改为仅使用&lt;xmlns&gt;(没有属性),它就会起作用。

我远非 XSLT 专家。有人有建议吗?

【问题讨论】:

  • 这是一个经常被问到的问题 - 搜索 namespace
  • 在 SO 搜索框中输入您的问题的标题会在几乎相同的问题上获得 125 次点击。你怎么会找不到他们?

标签: java xml xslt attributes


【解决方案1】:

找到了。我刚刚将它添加到我的 XSLT 中,它显然复制了它,但去除了命名空间。

  <!-- by default, copy all nodes -->
    <xsl:template match="*" mode="copy-no-namespaces">
        <xsl:element name="{local-name()}">
            <xsl:copy-of select="@*"/>
            <xsl:apply-templates select="node()" mode="copy-no-namespaces"/>
        </xsl:element>
    </xsl:template>

【讨论】:

猜你喜欢
  • 2014-02-19
  • 2011-02-10
  • 2017-11-11
  • 2010-10-27
  • 2012-08-16
  • 1970-01-01
  • 2014-02-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多