无法创建xml文件

时间:2019-01-11 15:58:10

标签: xml vb.net

我似乎无法创建XML文件。我正在尝试创建这个:

<?xml version="1.0" encoding="UTF-8"?>
<RFQsIssued xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <Items>
        <Item ID="s1600" Sent="01/01/1980" UoM="Each"/>
        <Item ID="54322" Sent="02/02/1980" UoM="Each"/>
    </Items>
</RFQsIssued>

我尝试使用此代码:

    Document = New XmlDocument()
    Declaration = Document.CreateXmlDeclaration("1.0", "utf-8", Nothing)
    Document.AppendChild(Declaration)
    RFQsIssued = Document.CreateElement("RFQsIssued")

    'Makes a file, not the one I want, if I comment out these 4 lines
    Attribute = Document.CreateAttribute("xmlns", "xsi", "http://www.w3.org/2000/xmlns/")
    RFQsIssued.Attributes.Append(Attribute)
    Attribute = Document.CreateAttribute("xmlns", "xsd", "http://www.w3.org/2000/xmlns/")
    RFQsIssued.Attributes.Append(Attribute)

    Items = Document.CreateElement("Items")

    Item = Document.CreateElement("Item")
    Attribute = Document.CreateAttribute("ID")
    Attribute.InnerText = "s1600"
    Item.Attributes.Append(Attribute)
    Attribute = Document.CreateAttribute("Sent")
    Attribute.InnerText = "01/01/1980"
    Item.Attributes.Append(Attribute)
    Attribute = Document.CreateAttribute("UoM")
    Attribute.InnerText = "Each"
    Item.Attributes.Append(Attribute)
    Items.AppendChild(Item)

    Item = Document.CreateElement("Item")
    Attribute = Document.CreateAttribute("ID")
    Attribute.InnerText = "54322"
    Item.Attributes.Append(Attribute)
    Attribute = Document.CreateAttribute("Sent")
    Attribute.InnerText = "02/02/1980"
    Item.Attributes.Append(Attribute)
    Attribute = Document.CreateAttribute("UoM")
    Attribute.InnerText = "Each"
    Item.Attributes.Append(Attribute)
    Items.AppendChild(Item)

    RFQsIssued.AppendChild(Items)
    Document.AppendChild(RFQsIssued)
    Document.Save(Path)

但是它会在Save上产生错误:

  

不能使用带有空名称空间的前缀

当我注释掉前2个属性时,它会生成一个文件,但不是我想要的文件。

<?xml version="1.0" encoding="utf-8"?>
<RFQsIssued>
  <Items>
    <Item ID="s1600" Sent="01/01/1980" UoM="Each" />
    <Item ID="54322" Sent="02/02/1980" UoM="Each" />
  </Items>
</RFQsIssued>

知道我在做什么错吗?我知道日期是错误的,我想我可以找出原因,但是我无法获取属性。

2 个答案:

答案 0 :(得分:0)

XML文字是VB.NET的一大特色(与C#有所不同),与通过在代码中创建每个属性和元素进行构建相比,XML文字使XML的操作更加容易,而且不易出错。就您而言,您所需要做的就是:

Dim doc As XDocument =
    <?xml version="1.0" encoding="UTF-8"?>
    <RFQsIssued xmlns:xsd="http://www.w3.org/2001/XMLSchema"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
        <Items>
            <Item ID="s1600" Sent="01/01/1980" UoM="Each"/>
            <Item ID="54322" Sent="02/02/1980" UoM="Each"/>
        </Items>
    </RFQsIssued>

您可以使用“ <%=”和“%>”将变量的值替换为XML,例如内部文本或属性,例如:

<Item ID=<%= item.Id %> Sent=<%= item.SentDate %> UoM="Each"/>

如果要动态在文档中(或在更高级别的父级下)构建元素,可以将XML文字分配给XElement而不是XDocument,并且仍然可以工作与您的XElementXDocument进行编程交流,例如:

Dim itemsElement = doc.Element("Items")
Dim itemToAdd = <Item ID=<%= item.Id %> Sent=<%= item.SentDate %> UoM="Each"/>
itemsElement.Add(itemToAdd)

答案 1 :(得分:0)

我更喜欢基于类的方法,然后使用taskExecutor创建xml。使用类使IMO的代码更易于读写。

XmlSerializer