如何在XSLT中添加多个命名空间?

时间:2016-05-11 11:27:22

标签: xslt

我是XSLT的新手。我有以下XML结构。如何在类似的结构中形成XSLT,我可以以类似的方式包含所有上述命名空间?

<?xml version='1.0' encoding='UTF-8'?>
<NS1:Envelope xmlns:NS1="http://schemas.xmlsoap.org/soap/envelope/">
  <NS1:Body>
    <NS2:Data xmlns:NS2="myurl1.....">
      <NS3:Created xmlns:NS3="myurl2....."></NS3:Created>
      <NS5:Success xmlns:NS5="myurl3....."></NS5:Success>
    </NS2:Data>
  </NS1:Body>
</NS1:Envelope>

2 个答案:

答案 0 :(得分:0)

我不知道标准XSLT是否可行。但是,使用System.Xml,您可以按以下方式插入命名空间节点。我怀疑同样适用于非托管MSXML,但尚未尝试

<xsl:stylesheet version="1.0"
            xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
            xmlns:msxsl="urn:schemas-microsoft-com:xslt"
            exclude-result-prefixes="msxsl">
<xsl:template match="/*">
    <xsl:variable name="fragment">
        <dummy xmlns:foo="bar" />
    </xsl:variable>
    <xsl:copy>
        <xsl:copy-of select="msxsl:node-set($fragment)/dummy/namespace::foo" />
        <xsl:copy-of select="node() | @*" />
    </xsl:copy>
</xsl:template>

答案 1 :(得分:0)

您可以在元素的开始标记中使用xmlns属性定义命名空间。 单独使用,它定义了与前缀相关联的默认命名空间,它定义了其他命名空间(例如xmlns:toto =&#34; namespaceURI&#34;)

参见xml namespace 在示例中,他们定义:

<root xmlns:h="http://www.w3.org/TR/html4/" xmlns:f="http://www.w3schools.com/furniture">

您可以在此示例中使用hf作为

的前缀
<h:table>
<f:table>

对于您的示例,用于定义NS2:

<NS1:Envelope xmlns:NS1="http://schemas.xmlsoap.org/soap/envelope/" xmlns:NS2="YOUR_NAMESPACE_URI_FOR_NS2">
  <NS1:Body>
    <NS2:Data>
      <NS3:Created></NS3:Created>
      <NS5:Success></NS5:Success>
    </NS2:Data>
  </NS1:Body>
</NS1:Envelope>

为NS3,NS5等做同样的事情。