我必须能够解析这两个xml-s:
<!-- Case 1 -->
<root xmlns="http://www.xml.namespace/111111">
<dataObject id="Id1" name="Name1" xmlns="http://www.xml.namespace/222222" />
</root>
<!-- Case 2 -->
<root xmlns:myNs="http://www.xml.namespace/222222">
<myNs:dataObject myNs:id="Id1" myNs:name="Name1" />
</root>
我必须将
<dataObject>
(通过XmlSerializer
)解析为具有以下内容的C#模型类:[XmlAttribute(AttributeName = "id", Namespace="http://www.xml.namespace/222222")]
public string Id { get; set; }
但是它仅适用于
Case 2
,不适用于Case 1
。所以我用以下代码检查了
Case 1
:var xmlString = @"<dataObject id=""Id1"" name=""Name1"" xmlns=""http://www.xml.namespace/222222"" />";
var xElement = XElement.Parse(xmlString);
var idAttribute = xElement.FirstAttribute;
Console.WriteLine(idAttribute.Name.Namespace); // ""
Console.WriteLine(xElement.Name.Namespace); // "http://www.xml.namespace/222222"
在这里
XElement
认为它具有名称空间,而XAttribute
认为它们没有任何名称空间。因此,
XAttribute
根本不了解同级的xmlns
xml名称空间声明属性。这是一个错误,还是我做错了什么?
最佳答案
事实证明这不是错误,所描述的行为符合xml规范。
看到:
XML Default namespaces for unqualified attribute names?
Applying Namespaces to Elements and Attributes
关于c# - XAttribute不知道IsNamespaceDeclaration的同级XAttribute,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42142130/