带有命名空间的VB.NET XML Literal变量元素名称

时间:2015-09-01 08:52:43

标签: xml vb.net

使用XML文字时,如何使用变量元素名称?当我不尝试使用命名空间时,这很好,但是当我这样做时,它会失败。

这很好用:

Dim elementName As String = "tc" 
Dim tc As XElement = <<%= elementName %>/>

并返回:

<tc />

但是如果我尝试添加'w:'命名空间,那么它不会:

Dim tc As XElement = <w:<%= elementName %>/>

或者这个:

Dim tc As XElement = <<%= "w:" & elementName %>/>

所以有人可以告诉我怎么去:

<w:tc />

可变,使用xml文字?

更新

感谢马丁的回答,这正是我所寻求的。只是为了澄清,我正在处理的根文档已经具有我需要的命名空间,我只是添加/编辑现有文档(wordprocessingml文档)。

我认为,这是解决这个问题的最简单,最优雅的方法:

Dim tc as XElement = <<%= Me.Root.GetNamespaceOfPrefix("w") + elementName %>/>

其中Me是继承XDocument的类。

1 个答案:

答案 0 :(得分:0)

您可以使用构建XName(执行XNamespace + "localName")的表达式,例如

    Dim ns1 As XNamespace = "http://example.com/ns1"
    Dim ns2 As XNamespace = "http://example.com/ns2"
    Dim localName1 As String = "foo"
    Dim localName2 As String = "bar"
    Dim root As XElement =
    <root xmlns:ns1="http://example.com/ns1" xmlns:ns2="http://example.com/ns2">
        <<%= ns1 + localName1 %>>test</>
        <<%= ns2 + localName1 %>>test 2</>
        <<%= ns1 + localName2 %>>test</>
        <<%= ns2 + localName2 %>>test 2</>
    </root>
    Console.WriteLine(root)

结果是

<root xmlns:ns1="http://example.com/ns1" xmlns:ns2="http://example.com/ns2">
  <ns1:foo>test</ns1:foo>
  <ns2:foo>test 2</ns2:foo>
  <ns1:bar>test</ns1:bar>
  <ns2:bar>test 2</ns2:bar>
</root>