Với đoạn mã sau:XmlSerializer trong .NET với XmlSchemaForm.Unqualified
using System;
using System.Xml.Schema;
using System.Xml.Serialization;
namespace XmlSerializationTest
{
[XmlType(Namespace = "http://www.test.com")]
public class Element
{
[XmlElement]
public int X;
}
[XmlRoot(Namespace = "http://www.test.com")]
public class Root
{
[XmlElement(Form = XmlSchemaForm.Unqualified)]
public Element Element;
}
public static class Program
{
public static void Main(string[] args)
{
var root = new Root { Element = new Element { X = 1 } };
var xmlSerializer = new XmlSerializer(typeof(Root));
xmlSerializer.Serialize(Console.Out, root);
}
}
}
đầu ra là:
<?xml version="1.0" encoding="ibm852"?>
<Root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.test.com">
<Element xmlns="">
<X xmlns="http://www.test.com">1</X>
</Element>
</Root>
Câu hỏi là tại sao không thiết lập thuộc tính Form để XmlSchemaForm.Unqualified
nguyên nhân các Element
không gian tên của phần tử được đặt thành ""
ngay cả khi nó có thuộc tính XmlTypeAttribute
có cùng một không gian tên như phần tử Gốc?
Loại mã này (phần XmlSchemaForm.Unqualified
) được tạo bởi công cụ WSCF.blue
và nó gây rối với không gian tên.
"không đủ tiêu chuẩn" chỉ ra rằng các thuộc tính từ namespace mục tiêu không cần thiết để đủ điều kiện với tiền tố namespace. Vì vậy, đó là lý do tại sao bạn nhận được xmlns = "" nếu được đặt thành đủ điều kiện của nó. Như bạn đã nói từ một công cụ tự động. xem có các tùy chọn cấu hình trong công cụ không. – Aravind
@Aravind: Tôi nghĩ rằng unqualified có nghĩa là serializer không bị buộc phải sử dụng tiền tố (nó có thể hoặc có thể không). Nhưng tôi không thấy lý do tại sao nó sẽ đổi tên của phần tử Element (từ "http://www.test.com" thành "")! Thật không may WSCF.blue dường như không có chuyển đổi phù hợp để sửa lỗi đó. – Stefan