使用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的类。
答案 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>