xslt中的XML名称空间处理

我需要使用xslt从一个xml格式转换为另一个xml。最初,我尝试了没有命名空间,我知道了。 但是当我尝试使用名称空间xmlns =“http://ws.wso2.org/dataservice”它不工作没有前缀作为xmlns:d =“http://ws.wso2.org/dataservice”在给定的xml文件

<test xmlns="http://ws.wso2.org/dataservice">
 <datarows>
  <name>Name</name>
 </datarows>
 <datarows>
  <name>karthik</name>
 </datarows>
 </testcsv>

我需要xsl转换后的xml文件

<head>
<names>Name</names>
<names>karthik</names>
</head>

帮助我与xslt

我试过xslt

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:d="http://ws.wso2.org/dataservice" exclude-result-prefixes="d" >
    <xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>
     <namespace-alias stylesheet-prefix="xsl" result-prefix="#default"/>


    <xsl:template match="/">
    <head>
        <xsl:for-each select="testcsv/datarows">
            <names>
                <xsl:value-of select="name" />
            </names>
        </xsl:for-each>
        </head>
    </xsl:template>
</xsl:stylesheet>

据我所知,你会(或可能)不会更改xml中的xmlns声明(可能是因为它是在其他地方生成的)。 比你必须在你的xlst中使用xml节点前缀。

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:d="http://ws.wso2.org/dataservice"
    exclude-result-prefixes="d"
    >
    <xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>
    <xsl:template match="/">
        <head>
            <xsl:for-each select="d:testcsv/d:datarows" >
                <names>
                    <xsl:value-of select="d:name" />
                </names>
            </xsl:for-each>
        </head>
    </xsl:template>
</xsl:stylesheet>

请更改以下列表:1.您的输入XML格式不正确。 请将根元素更改为<testcsv> 2.从<testcsv>删除<namespace-alias stylesheet-prefix="xsl" result-prefix="#default"/> ,因为它不是必需的。 3.在输入XML中添加命名空间xmlns:d =“http://ws.wso2.org/dataservice”

输入XML:

<?xml version="1.0"?>
<testcsv xmlns:d="http://ws.wso2.org/dataservice">
 <datarows>
  <name>Name</name>
 </datarows>
 <datarows>
  <name>karthik</name>
 </datarows>
 </testcsv>

XSLT转换:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:d="http://ws.wso2.org/dataservice" exclude-result-prefixes="d" >
    <xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>

    <xsl:template match="/">
    <head>
        <xsl:for-each select="testcsv/datarows">
            <names>
                <xsl:value-of select="name" />
            </names>
        </xsl:for-each>
        </head>
    </xsl:template>
</xsl:stylesheet>

输出:

<head>
  <names>Name</names>
  <names>karthik</names>
</head>
链接地址: http://www.djcxy.com/p/65709.html

上一篇: XML namespace handling in xslt

下一篇: how to parse a sitemap.xml file using scrapy's XmlFeedSpider?