如何让LinqToXSD正确输出命名空间前缀声明?我正在尝试使用LinqToXSD创建一个XML数据绑定类和一个包含许多导入模式的XML模式。所有模式都位于此处。为此,我使用了以下根架构文档:TmatsRoot我使用LinqtoXSD创建了类。然后我写了下面的测试:tmats.PointOfContact.Add(newPointOfContactType{Address="12345AnywhereStreet",Agency="MyAgency",Name="RobertHarvey",Telephone="111-222-3333"});Debug.Print(tmats.ToString());我希望输出看起来像这样:MyProgram2012-05-09-07:00RobertHarveyMyAgency12345AnywhereStreet111-222-3333相反我得到这个:我的程序2012-05-09-07:00RobertHarveyMyAgency12345AnywhereStreet111-222-3333有没有办法让LinqToXSD产生预期的输出?您应该映射每个导入的模式:elementFormDefault仅适用于它所在的模式,并且不会覆盖任何包含或导入中的设置。如果要隐藏名称空间,所有模式都必须指定elementFormDefault="unqualified"。另外,如果要暴露命名空间,每个模式必须指定elementFormDefault="qualified"审查单元测试后更新:您的评论:我的项目2012-05-15您的输出:我的项目2012-05-15未解决问题是标签重复-一切看起来都很好,仍在试图理解为什么会这样。星期一更新:我认为LinqToXSD工具中有一个错误——我已经完成了我能想到的每一种组合,但它并没有始终如一地解决你的问题,但是……我已经设法修复了重复:在XmlHelper文件中,更改返回语句:System.Xml.Linq.XDocumentxd=System.Xml.Linq.XDocument.Parse(sb.ToString());返回xd.Root.FirstNode.ToString();我知道这是一个hack,但它解决了问题并且您的LoopbackTest通过了。如果我用Tmats类创建元素,我没有得到任何前缀,我已经尝试了各种属性组合,我能做的最好的就是重新附加命名空间。如果您正在与外部系统交换信息,那么我有一个修复方法:在您的代码中使用Tmats对象,使用名称空间对其进行序列化,通过XSLT运行它以将ns映射到前缀。我知道它很笨重,但我认为它是最好的,而且您无法真正修复LinqToXSD代码。XSLT将命名空间映射到前缀(您需要在“样式表”声明和“映射器”中维护命名空间集:生产:我的程序2012-05-09-07:00RobertHarveyMyAgency12345AnywhereStreet111-222-3333好的,所以这远非理想,但只有当您需要与其他人交互时,您的代码才能在项目中正常运行,并且您需要修改xml输出(记住更改elementFormDefault="qualified"(或remove)itinyourXSD)–如果你将你的XSLT缓存为XslCompiledTransform,你几乎不会注意到它的发生。以上是C#学习教程:HowtomakeLinqToXSDoutputthenamespaceprefixdeclarationcorrectly?分享全部内容,如果对你有用大家和需要了解更多C#学习教程,希望大家多多关注~本文收集自网络,不代表立场,如涉及侵权,请点击右边联系管理员删除转载请注明出处:
