2010-02-05 38 views
5

Tôi có một XElement mà tôi cần tạo thông qua các ký tự xml động/các biểu thức nhúng Tôi cần nó để kế thừa vùng tên mặc định. Điều này không thể xuất hiện mặc dù thông qua tất cả mọi thứ tôi đã cố gắng. Có ai biết cách làm công việc này không?Tại sao các ký tự XML động không thừa kế không gian tên mặc định

Ví dụ

Imports <xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"> 
Sub CreateXAML() 
     Dim obj = "Rectangle" 
     Dim objFill As String = obj & ".Fill" 
     Dim myXML As XElement = <<%= obj %>><<%= objFill %>>no namespace</></> 

     Dim myXML2 As XElement = <Path><Path.Fill>inherits namespace</Path.Fill></Path> 
     MsgBox(myXML.ToString & vbCrLf & myXML2.ToString) 
End Sub 

Người đầu tiên, myXML, không được tạo ra với ns mặc định, nhưng điều thứ hai, myXML2, là.

+2

Tôi đã tìm cách lấy XElement mà không có ns mặc định, vì vậy câu hỏi của bạn sẽ trả lời cách thực hiện điều đó! – CoderDennis

+2

Thú vị là 'Dim myXML như XElement = <<%= obj %>> không có không gian tên' thậm chí không hoạt động, nhưng tạo ra một ngoại lệ thời gian chạy. Tôi đã luôn luôn nghĩ cách xml literals chèn vào không gian tên là lạ. Chưa biết cách kiểm soát nó. – CoderDennis

+0

Vâng, tại một thời điểm tôi cũng đang tìm kiếm một cách để tạo ra nó mà không có không gian tên mặc định, vì vậy nó thực sự là một kỹ thuật tốt. Tôi chỉ muốn để có thể gắn cờ nó là "không cần ns mặc định" hoặc một cái gì đó như thế. –

Trả lời

3

Đây là tài liệu http://msdn.microsoft.com/en-us/library/bb675177.aspx trong phần Không gian tên toàn cầu và phần Biểu thức được nhúng mà nó sẽ không hoạt động, nhưng bài viết không cung cấp cách giải quyết hoặc giải pháp. Tôi có nhu cầu này trước khi quá và chỉ cần thông qua thử và sai, đã có thể nhận được nó để làm việc bằng cách tạo ra các phần tử trước với không gian tên trong tow, như thế này:

Imports <xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"> 
Sub CreateXAML() 
    Dim shape = "Rectangle" 
    Dim obj = <<%= "{http://schemas.microsoft.com/winfx/2006/xaml/presentation}" & shape %>></> 
    Dim objFill = <<%= "{http://schemas.microsoft.com/winfx/2006/xaml/presentation}" & shape %>></> 
    Dim myXML As XElement = <<%= obj %>><<%= objFill %>>has namespace</></> 

    Dim myXML2 As XElement = <Rectangle><Rectangle.Fill>inherits namespace</Rectangle.Fill></Rectangle> 
    MsgBox(myXML.ToString & vbCrLf & myXML2.ToString) 
End Sub 

Bạn có thể tự hỏi tại sao "Nhập khẩu" tuyên bố vẫn còn đó. Vâng, nó được sử dụng trong trường hợp thêm vào một XElement không động để kế thừa không gian tên chung. Như thế này:

<<%= obj %>><<%= objFill %>><Text>has namespace</Text></></> 
+1

Điều này thật tuyệt vời. Tôi đã không thể tìm cách để có được các xmlns trong đó mà không có lỗi thời gian chạy, như * Dim obj = <<%= shape %> xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation"> *. Tuyệt vời, tuyệt vời, tuyệt vời! –

+0

Tôi không thể vượt qua mức độ tuyệt vời này. Nó đã cắt giảm 50% mã của tôi! –

Các vấn đề liên quan