为什么动态XML文字不会继承默认命名空间

时间:2010-02-05 07:28:51

标签: vb.net xml-literals

我有一个XElement,我需要通过动态xml文字/嵌入式表达式创建我需要它来继承默认命名空间。通过我尝试的一切,这似乎不可能。有谁知道如何使这项工作?

例如

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

第一个myXML不是使用默认ns创建的,而第二个myXML2是。

1 个答案:

答案 0 :(得分:3)

在全局命名空间和嵌入式表达式部分中记录了http://msdn.microsoft.com/en-us/library/bb675177.aspx,它不起作用,但本文未提供变通方法或解决方案。我之前也有这种需求,只是通过反复试验,能够通过预先创建带有命名空间的元素来实现它,如下所示:

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

您可能想知道为什么“Imports”声明仍然存在。好吧,它用于添加非动态XElement以继承全局命名空间。像这样:

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