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?