1

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

我们开始在数据层的某些部分使用 Linq,我需要序列化一些 Linq 对象以供 XSL 样式表使用。我认为最好转向使用 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">
4

3 回答 3

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>`
于 2009-04-06T19:08:15.143 回答
2

会不会是您的新 XML 在其中包含 XML 名称空间,而您的 XSLT 没有正确处理?

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

马克

于 2009-04-06T18:50:55.683 回答
0

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

唯一让我感动的是 xslt 文件中没有对命名空间的引用......

于 2009-04-06T18:58:35.710 回答