Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 根元素具有名称空间时转换失败_Xml_Xslt_Reporting Services_Xslt 1.0 - Fatal编程技术网

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

我有一个由MSSQLServer报表服务器生成的XML格式的报表。根元素中有一个名称空间声明,如源xml代码片段所示

<?xml version="1.0" encoding="utf-8"?>
<data xsi:schemaLocation="course http://<sqlserveraddress>/ReportServer?%7C4ke03n45bssdhbvwcrhnst45%7C%40%7C%2FPepi%2FAngus%20Development%2FPreTerm%2Fcourse%7C&amp;rs%3ACommand=Render&amp;rs%3AFormat=XML&amp;rs%3ASessionID=y14z41zpzcfdms45pz2iab55&amp;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的占位符,如前所述;在XLST
xmlns: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">