vb.net - 为什么动态 XML 文字不继承默认命名空间

标签 vb.net xml-literals

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

例如

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 , 是。

最佳答案

这是记录在案 http://msdn.microsoft.com/en-us/library/bb675177.aspx在 Global Namespaces and Embedded Expressions 部分,它不起作用,但文章没有提供解决方法或解决方案。我之前也有这个需求,只是通过反复试验,能够通过提前创建带有 namespace 的元素来使其工作,如下所示:

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

您可能想知道为什么“导入”语句仍然存在。嗯,它用于添加非动态XElement来继承全局命名空间的情况。像这样:
<<%= obj %>><<%= objFill %>><Text>has namespace</Text></></>

关于vb.net - 为什么动态 XML 文字不继承默认命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2205626/

相关文章:

debugging - XSLT 简化样式表与 xsl :attribute-set element

c# - 使用 ASP.net 和 VB.net(或 C#)编辑和删除 XML 文件中的数据

asp.net - 从asp.net中的repeater控件获取数据绑定(bind)值

vb.net - 条件 XML 文字

vb.net - xml 命名空间和 xml 文字

xml - 在 XML 文字中使用字符串

xml - 构建包含 Anti-XML 对象的 XML 文字

vb.net - 在 VB 中创建的 .txt 文件与我随机创建的文件是否不同?

vb.net - 动态添加串行端口并在拔出 USB 时从组合框中删除它们

c# - Excel 2016 在保存错误时触发撤消?