如果XML文件附加了架构,则#XSLT转换不起作用?

时间:2011-01-06 13:13:41

标签: c# xslt xsd

我们有一个奇怪的问题,我们正在使用几个XSLT文件转换一个相当复杂的XML文件,这不是问题。

问题在于,如果XML文件附加到模式,则转换不起作用,如果我们删除模式声明它开始工作正常。

有什么线索可以解决问题吗?

这是架构推断

<xs:schema id="play"
targetNamespace="highway"
elementFormDefault="qualified"
xmlns="highway"
xmlns:mstns="highway"
xmlns:xs="http://www.w3.org/2001/XMLSchema">

我们只是使用以下代码链接它(Visual Studio Intellisense然后启动)

<helloElement name="hello" xmlns="highway">

我很欣赏这不是很多,不知道在症状方面提供什么,如果您需要任何信息,请告诉我。

非常感谢!

2 个答案:

答案 0 :(得分:5)

问题不在于架构,问题是您的样式表需要考虑的名称空间声明xmlns="highway",例如

<xsl:stylesheet
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:hw="highway"
  version="1.0">

  <xsl:template match="hw:helloElement">
    ...
  </xsl:template>

</xsl:stylesheet>

等等,您匹配的任何地方或选择您需要使用前缀的元素。

答案 1 :(得分:2)

添加架构声明时,您要在XML文档(xmlns="highway")中添加默认命名空间,而以前不存在。这将影响XSLT中元素引用和XPATH的解释,因为您的所有元素现在不再是<someElement>,而是<highway:someElement>。查看this link了解详情。