(un)在 XTypedElement 的元素中正确引用名称空间
我有一个继承自 XTypedElement 的元素(使用 LinqToXsd 生成)。它有一个如下定义的字符串属性:
public string lang {
get {
XAttribute x = this.Attribute(XName.Get("lang", "xml"));
return XTypedServices.ParseValue<string>(x, XmlSchemaType.GetBuiltInSimpleType(XmlTypeCode.String).Datatype);
}
set {
this.SetAttribute(XName.Get("lang", "xml"), value, XmlSchemaType.GetBuiltInSimpleType(XmlTypeCode.String).Datatype);
}
}
最初它是用 XName.Get("lang") 生成的,但我添加了命名空间“XML”,因为输出应该如下所示:
<tag xml:lang="nl-NL">...</tag>
相反,我现在得到的是:
<tag p1:lang="nl-NL" xmlns:p1="xml">...</tag>
以下可能完全是不相关,但我知道如何使用旧学校 System.Xml.Serialization.XmlSerializer 类解决此问题。您可以在调用 Serialize 方法时指定一些名称空间。 XTypedElement 的 ToString() 没有重载,我可以在其中指定此类名称空间。有人有想法吗?
I have an element that inherits from XTypedElement (generated with LinqToXsd). It has a string property defined like this:
public string lang {
get {
XAttribute x = this.Attribute(XName.Get("lang", "xml"));
return XTypedServices.ParseValue<string>(x, XmlSchemaType.GetBuiltInSimpleType(XmlTypeCode.String).Datatype);
}
set {
this.SetAttribute(XName.Get("lang", "xml"), value, XmlSchemaType.GetBuiltInSimpleType(XmlTypeCode.String).Datatype);
}
}
Originally it was generated with XName.Get("lang"), but I added the namespace "XML" because the output should look like:
<tag xml:lang="nl-NL">...</tag>
instead, I now get this:
<tag p1:lang="nl-NL" xmlns:p1="xml">...</tag>
The following might be totally unrelated, but I know how to solve this problem using the old school System.Xml.Serialization.XmlSerializer class. There you can specify some namespaces when calling the Serialize method. The XTypedElement's ToString() does not have an overload where I can specify such namespaces. Ideas anyone?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
回答我自己的问题:在谷歌搜索更多之后,我发现了这个(它成功了):
我确实想知道它返回了什么(只有一个重载,它是一个字符串),所以我在它上面放置了一个断点并读取了值XNamespace.Xml.NamespaceName。它是“http://www.w3.org/XML/1998/namespace”。不知何故,Linq-to-xml 似乎知道它与“xml”有何关系:-)
正确工作的代码现在如下所示:
Answering my own question: after googeling a little more, I found this (and it did the trick):
I did wonder what that was returning (there's only one overload and it's a string) so I put a breakpoint on it and read the value of XNamespace.Xml.NamespaceName. it was "http://www.w3.org/XML/1998/namespace". Somehow Linq-to-xml seems to know how that relates to "xml" :-)
The correctly working code now looks like this: