在VB.NET中使用CDATA字符串中的变量?

时间:2014-01-05 09:08:37

标签: .net xml vb.net console cdata

假设我有一个带有这样的多行字符串的类:

Public Class HelpSection

    ' This process name (Example: 'MyProcess.exe')
    Public Shared ReadOnly ThisProcess As String = 
        Process.GetCurrentProcess().MainModule.ModuleName

    Public Shared ReadOnly Syntax As String = 
        <a><![CDATA[
            [+] Syntax:

                ThisProcess (SWITCH)=(VALUE) (IN FILE)
        ]]></a>.Value

End Class

现在,当我调用多行字符串时:

Console.WriteLine(HelpSection4.Syntax)

它会打印出来:

ThisProcess (SWITCH)=(VALUE) (IN FILE)

但我想自动打印ThisProcess变量内容(流程名称),如下所示:

MyProcess.exe (SWITCH)=(VALUE) (IN FILE)

那么我如何管理CDATA文字以动态设置变量内容?

这可能吗?

也许更好的方法来管理这个? (动态没有硬编码,请记住它是用于通用的)

  

更新

我试图重现@ Dan-o 解决方案但当然在我的情况下不能正常工作,因为它是CDATA文字,然后如何逃避它或做必要的修改?:

        Dim ProcessName As String = "MyProcess.exe"

        Dim Help As XElement =
<Help>
    <Process><%= ProcessName %></Process>
    <Syntax><a><![CDATA[
[+] Syntax:

    <% ProcessName %> (SWITCH)=(VALUE) (IN FILE)
]]></a></Syntax>
</Help>

        Console.WriteLine(Help.<Process>.Value)
        Console.WriteLine(Help.<Syntax>.Value)
  

更新2

在一个简单的XML文件(例如,.NET代码片段)中,我使用了我以前学过的技巧来在CDATA中挖掘角色:

<Literal Editable="false">
    <ID>cdataend</ID>
    <ToolTip>Part of the CDATA end tag.</ToolTip>
    <Default>&gt;</Default>
</Literal>

然后我可以在里面写>非法字符,如下:

<Code Language="vb"><a><![CDATA[ something ]]$cdataend$</a>.Value ]]></Code>

问题是,我不知道这是否可以帮助我解决变量问题......只是我试图提出想法。

1 个答案:

答案 0 :(得分:2)

根据MSDN

Dim contactName As String = "Patrick Hines" 
Dim contact As XElement = 
  <contact>
    <name><%= contactName %></name>
  </contact>
Console.WriteLine(contact)

根据你的情况调整它应该是一件非常简单的事情。