我认为XSL中的命名空间存在问题

时间:2013-11-21 12:53:48

标签: xml xslt xml-namespaces

我有这个问题。

我的输出如下:

  <job id="">
      <str name="person or company">text</str>
      <str name="content">
         <content>
            <str name="title">
               <h1 xmlns="http://www.w3.org/1999/xhtml">text</h1>
            </str>
            <str name="detail">
               <p xmlns="http://www.w3.org/1999/xhtml">text</p>
            </str>

我的名字就像那样:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:xi="http://www.w3.org/2001/XInclude"
                xmlns:str="http://exslt.org/strings"
                xmlns:exsl="http://exslt.org/common"
                xmlns:xhtml="http://www.w3.org/1999/xhtml"
                xmlns:etl="http://etl.dob.sk/etl"
                extension-element-prefixes="str exsl"
                exclude-result-prefixes="xhtml"
                etl:norefetch="1">
<!-- sys -->
<xsl:output method="xml" indent="yes" encoding="utf-8" cdata-section-elements="param url"/>

如果我将此行放入名称空间:

xmlns="http://www.w3.org/1999/xhtml7

然后我在这里遇到问题:

 <job xmlns="http://www.w3.org/1999/xhtml" xmlns:xhtml="http://www.w3.org/1999/xhtml" id="">
      <str name="person or company">text</str>
      <str name="content">
         <content>
            <str name="title">
               <h1>text</h1>
            </str>
            <str name="detail">
               <p>text</p>
            </str>

我该如何解决?

1 个答案:

答案 0 :(得分:2)

我怀疑您的输入元素位于XHTML命名空间中,并且您将它们复制到输出中,但是要删除命名空间。因此,您需要更改复制XHTML输入元素的代码以转换它们,例如

<xsl:template match="xhtml:*">
  <xsl:element name="{local-name()}" namespace="">
    <xsl:apply-templates select="@* | node()"/>
  </xsl:element>
</xsl:template>

将剥离命名空间,然后取消

<xsl:copy-of select="xhtml:h1"/>

你需要

<xsl:apply-templates select="xhtml:h1"/>

如果没有帮助,您需要分享更多样式表代码。