首页 > 解决方案 > 如何将 xml 文件添加到我的解决方案并将文件路径作为字符串获取

问题描述

我需要将 .xml 文件(作为测试表)添加到我的 VB.NET 测验项目中,然后将它们作为 string 引用。知道确切的文件路径很重要,因为在文件名中有一些属性,如类别和测试编号,在开始测验之前选择用户在运行时设置。这工作正常,但我的解决方案无法访问没有路径的文件。当我将文件添加为资源时,程序将文件作为字符串读取,而不是只带回路径。我怎样才能做到这一点?

标签: xmlvb.netvisual-studio

解决方案


请执行下列操作:

• 添加文件:Right-click on Solution- Add-New Item...

• 然后转到每个文件的属性(Right-click on file-Properties或选择文件并转到Properties窗格)并选择Copy always(或Copy if newer)。

• 您也可以首先在解决方案资源管理器中选择所有文件并转到“属性”来设置所有文件的属性。

更新

假设您有以下项目结构:

IMG1

如您所见,您consumers.xml在解决方案的根文件夹中有addresses.xml文件,在子文件夹中有data文件。当您构建应用程序时,文件的位置将保留在解决方案资源管理器中:consumers.xml将与您的 EXE 文件位于同一文件夹中,并且data将在其中创建包含addresses.xml文件的子文件夹。有了这样的布局,你可以使用下面的方法来加载它们。在我的示例中,我使用XElement类。

消费者.xml

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<consumers>
    <consumer>
        <name>Steve</name>
        <age>19</age>
    </consumer>
    <consumer>
        <name>Mike</name>
        <age>23</age>
    </consumer>
</consumers>

地址.xml

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<addresses>
    <address>address1</address>
    <address>address2</address>
    <address>address3</address>
    <address>address4</address>
</addresses>

C#

static void Main(string[] args)
{
    // Load consumers
    var consumers = XElement.Load("consumers.xml");
    // Load addresses
    var addresses = XElement.Load("data/addresses.xml");
    // Query XMLs
    foreach (var consumer in consumers.Elements("consumer"))
    {
        WriteLine($"Name: {consumer.Element("name").Value}, Age: {consumer.Element("age")}");
    }
    foreach (var address in addresses.Elements("address"))
    {
        WriteLine($"Address: {address.Value}");
    }
}

VB

Sub Main()
    '// Load consumers
    Dim consumers = XElement.Load("consumers.xml")
    '// Load addresses
    Dim addresses = XElement.Load("data/addresses.xml")
    '// Query XMLs
    For Each consumer In consumers.<consumer>
        WriteLine($"Name: {consumer.Element("name").Value}, Age: {consumer.Element("age")}")
    '// Or:
    '// WriteLine($"Name: {consumer.<name>(0).Value}, Age: {consumer.<age>(0).Value}")
    Next
    For Each address In addresses.<address>
        WriteLine($"Address: {address.Value}")
    Next
End Sub

推荐阅读