带有根元素的命名空间的XSLT

时间:2016-03-24 17:49:26

标签: java xml xslt attributes

我一直在修补这个问题太久了,似乎无法在任何地方找到答案 - 或许我不知道如何提出问题。

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

    ProcessBuilder builder = new ProcessBuilder("cat", "/proc/meminfo");
    // Append all errors from process to log file:
    builder.redirectError(Redirect.appendTo(new File("/tmp/my.log")));
    Process process = builder.start();

此XML表示站点地图。我编写了一个XSLT来将其转换为分层列表。

using (SqlConnection con = new SqlConnection("Data Source=hans-pc;Initial Catalog=CntExp;Integrated Security=True"))
{
    SqlCommand cmd = new SqlCommand("INSERT INTO PreExp1 (Expe, Usuario) values (@Expe, @Usuario)", con);
    cmd.Parameters.AddWithValue("@Expe", TextBox1.Text);
    cmd.Parameters.AddWithValue("@Usuario", TextBox2.Text);
    //cmd.Parameters.AddWithValue("@Fecha", Datenow());

    con.Open();

    int insertar = cmd.ExecuteNonQuery();

    Response.Write("Inserted" + insertar.ToString());
}

当我有<?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 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> (没有属性),则它可以正常工作。

我远离XSLT大师。有人有建议吗?

1 个答案:

答案 0 :(得分:0)

找到它。我刚刚将它添加到我的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>