使用XML命名空间的奇怪行为(Strange behavior with xml-namespace

2019-08-16 16:02发布

为什么我得到一个空输出? 当我删除在XML中的xmlns部分如预期的输出,但随后IntelliSense不工作了。

warehouse.xml

<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="warehouse.xsl"?>
<warehouse xmlns="http://schema.mynamespace.net">
  <container>
    <item>
      <name>book</name>
      <value>1.23</value>
    </item>
    <item>
      <name>phone</name>
      <value>45.6</value>
    </item>
  </container>
</warehouse>

warehouse.xsl

<xsl:stylesheet xmlns="http://schema.mynamespace.net" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="text"/>

<xsl:template match="/">
  <xsl:apply-templates select="warehouse/container" />"
</xsl:template>

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

</xsl:stylesheet>

Answer 1:

即使你指定一个特定的命名空间为您的XSL默认命名空间,没有命名空间前缀的XPath总是在空命名空间。 你需要做这样的事情:

<xsl:stylesheet xmlns:mns="http://schema.mynamespace.net" 
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
   <xsl:output method="text"/>

   <xsl:template match="/">
     <xsl:apply-templates select="mns:warehouse/mns:container" />"
   </xsl:template>

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

</xsl:stylesheet>


文章来源: Strange behavior with xml-namespace