我似乎无法创建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>
知道我在做什么错吗?我知道日期是错误的,我想我可以找出原因,但是我无法获取属性。
答案 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
,并且仍然可以工作与您的XElement
和XDocument
进行编程交流,例如:
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