Xml 根元素具有名称空间时转换失败
我有一个由MSSQLServer报表服务器生成的XML格式的报表。根元素中有一个名称空间声明,如源xml代码片段所示Xml 根元素具有名称空间时转换失败,xml,xslt,reporting-services,xslt-1.0,Xml,Xslt,Reporting Services,Xslt 1.0,我有一个由MSSQLServer报表服务器生成的XML格式的报表。根元素中有一个名称空间声明,如源xml代码片段所示 <?xml version="1.0" encoding="utf-8"?> <data xsi:schemaLocation="course http://<sqlserveraddress>/ReportServer?%7C4ke03n45bssdhbvwcrhnst45%7C%40%7C%2FPepi%2FAngus%20Development
<?xml version="1.0" encoding="utf-8"?>
<data xsi:schemaLocation="course http://<sqlserveraddress>/ReportServer?%7C4ke03n45bssdhbvwcrhnst45%7C%40%7C%2FPepi%2FAngus%20Development%2FPreTerm%2Fcourse%7C&rs%3ACommand=Render&rs%3AFormat=XML&rs%3ASessionID=y14z41zpzcfdms45pz2iab55&rc%3ASchema=True"
Name="course"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="course">
<Tablix1>
<Details_Collection>
<Details action="create" fullname="The TV Commercial" Shortname="SCM147-7841" startdate="1405296000" idnum="7841" Code="SCM147" />
<Details action="create" fullname="Scoring Emotion" Shortname="SCM132-7842" startdate="1405296000" idnum="7842" Code="SCM132" />
</Details_Collection>
</Tablix1>
</data>
我无法在此xml源上使用XLST进行转换,即使我尝试按照下面文章中的描述声明XLST中的名称空间
我正在使用以下XLST
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:course="http://<sqlserveraddress/ReportServer>">
<xsl:template match="/">
<xsl:element name="data">
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
<xsl:template match="/course:Report/Tablix1/Details_Collection/Details[@action='create']">
<xsl:element name="datum" >
<xsl:attribute name="action">create</xsl:attribute>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
创造
我已经尝试使用源根元素名称空间声明中的完整查询字符串,但仍然没有成功
如果我去掉源XML文档上的名称空间声明,那么我将得到一个转换,以便XSL工作。也许我只是不理解根元素名称空间声明的语法,有人能给我解释一下吗
问候
Angus一个问题是,XML和XSLT中的名称空间声明不同,而且XSLT中没有正确引用名称空间 在XML中定义默认名称空间
<data xmlns="course">
(当然,这也是在寻找一个报告元素,它不存在于XML中)
因此,简而言之,您可能需要更改XSLT中的名称空间声明以匹配XSLT
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:course="course">
然后更改与源XML匹配的任何xpath表达式以使用上述名称空间前缀。
xmlns:course=“http://”>
无效。它不能包含我应该清楚地表明,企业是实际服务器地址db.domain.etc的占位符,如前所述;在XLSTxmlns:course=“course”
中,我被xsi:schemaLocation弄糊涂了=“当然http:///ReportServer
源XML中实际网址之前的单词course
行混淆了它的含义?。因此,为了澄清我自己的想法,源XML中的
语句是否声明了名称空间前缀或名称空间URI或两者?执行
声明了一个“默认”名称空间course
在这个实例中仍然是名称空间URI,但是由于没有指定前缀,XML中没有前缀的任何元素都将属于该名称空间。
<xsl:template match="/course:Report/course:Tablix1/course:Details_Collection/course:Details[@action='create']">
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:course="course">