XSL样式表不会解析DataContractSerializer生成的XML

时间:2009-04-06 18:37:50

标签: .net xslt datacontractserializer

我有一些类,我使用XMLSerializer序列化,然后使用XSLT转换为各种格式化的电子邮件或Web服务调用。一切都很好。

我们开始在数据层的某些部分使用Linq,我需要序列化一些要由XSL样式表使用的Linq对象。我认为最好转向使用DataContractSerializer而不是XMLSerializer。

我得到了DataContracts并设置了所有内容,并且通过对实体名称进行一些微小的更改来很好地序列化...但是现在样式表根本不会处理XML。我真的不知道为什么我没有得到至少一些东西......基本上所有出来的都是剥离了xsl标签的数据。

任何想法会导致什么?

编辑:

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="CallTicket">

在修改DataContract声明之前,这是从DataContractSerializer生成的XML:

<CallTicket xmlns="http://schemas.datacontract.org/2004/07/CRMInterface.CRMData" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">

3 个答案:

答案 0 :(得分:3)

您很可能遇到命名空间问题。例如:

如果XML看起来像这样

<Root xmls="http://www.example.org/1" ....

<test>one</test>

然后你必须在XSLT中做两件事之一

具体引用命名空间并相应地使用前缀

<xsl:stylesheet xmlns:ex="http://www.example.org/1" ....>`
   ...

    <myTag><xsl:select value-of="//ex:test"/></myTag>`

如果只有一个命名空间,则将其作为XSLT文件的默认命名空间:

<xsl:stylesheet xmlns="http://www.example.com/1" ...`

...
   <myTag><xsl:select value-of="//test"/></myTag>`

答案 1 :(得分:2)

你的新XML中是否有XML命名空间,你的XSLT没有正确处理?

您能向我们展示XML和XSLT文件的相关部分吗?

马克

答案 2 :(得分:0)

我想我弄清楚了,命名空间比我意识到的更重要。如果我为每个被序列化的类设置DataContractAttribute(Namespace =“”),它就可以工作。我还有更多与linq实体有关的工作......但是在正确的轨道上。

唯一让我感到兴奋的是xslt文件中没有对名称空间的引用......