我有一些类,我使用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">
答案 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文件中没有对名称空间的引用......