【问题标题】:Adding an xmlns Attribute to a Start Element VB.Net将 xmlns 属性添加到开始元素 VB.Net
【发布时间】:2019-01-24 16:59:33
【问题描述】:

我正在构建一个读取 SQL 并构建 XML 的 VB.net 控制台应用程序。我正在使用 Visual Studio 2013 和 .Net Framework 4.5。我的代码如下:

Private _namespaceDefault as String = ""AAIS_Homeowners_Premium""

Dim writer As XmlWriter = XmlWriter.Create(policyDir & "\Policy.xml", settings)
writer.WriteStartDocument()
writer.WriteStartElement("ROOT")
writer.WriteAttributeString("xmlns", "", Nothing, _namespaceDefault)

我也试过这个:

writer.WriteAttributeString("xmlns", _namespaceDefault)

当我运行程序时,我收到以下错误:“前缀 '' 不能在同一起始元素标记内从 '' 重新定义为 'AAIS_Homeowners_Premium'。”。 xmlns 值不是 URL,而是用于验证的 Schema 文件的名称。

如何将 xmlns 属性值添加到开始元素? XML 应如下所示:

<?xml version="1.0"?>
<ROOT xmlns="AAIS_Homeowners_Premium">
    <Company>12345</Company>
    <LOB>ABCDEFG</LOB>
    <Policies>
        <Policy>
            <PolicyNumber>6789</PolicyNumber>
            <Date>01/24/2018</Date>
        </Policy>
        <Policy>
            <PolicyNumber>2345</PolicyNumber>
            <Date>03/17/2018</Date>
        </Policy>
    </Policies>
</ROOT>

谢谢。

【问题讨论】:

  • dhead61 如果你看看我的回答,它会给出你想要的。
  • 你一直在编辑你的帖子。请停下来,因为答案无法反映您想要的内容,您需要根据给出的内容来弄清楚。谢谢。
  • 您可能会发现使用 XML 文字和 XElement / XDocument 比在代码中构建 XML 更容易一些。您可以使用 &lt;%=%&gt; 从代码中直接插入一个值,例如&lt;Guid&gt;&lt;%= Guid.NewGuid().ToString("D") %&gt;&lt;/Guid&gt;

标签: xml vb.net


【解决方案1】:

这是一些代码和输出。应该是你要找的:

代码:

        Dim _namespaceDefault As String = "AAIS_Homeowners_Premium"

        Dim doc As System.Xml.XmlDocument
        Dim elm As System.Xml.XmlNode
        Dim elmSub As System.Xml.XmlNode
        Dim elmMain As Xml.XmlNode

        doc = New Xml.XmlDocument

        elmMain = doc.CreateElement("ROOT")
        elmSub = elmMain.Attributes.Append(doc.CreateAttribute("xmlns"))
        elmSub.Value = _namespaceDefault

        elm = elmMain.AppendChild(doc.CreateElement("FirstNode"))
        elm.InnerText = "12345"

        elm = elmMain.AppendChild(doc.CreateElement("SecondNode"))
        elm.InnerText = "ABCDEFG"

        doc.AppendChild(doc.CreateXmlDeclaration("1.0", "UTF-8", "no"))
        doc.AppendChild(elmMain)
        doc.Save("Policy.xml")

结果:

    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <ROOT xmlns="AAIS_Homeowners_Premium">
      <FirstNode>12345</FirstNode>
      <SecondNode>ABCDEFG</SecondNode>
    </ROOT>

【讨论】:

  • 将使用您的方法制作一个版本。谢谢。
【解决方案2】:

这是您使用代码的方式(尽管两者都有帮助):

        Dim _namespaceDefault As String = "AAIS_Homeowners_Premium"

        Dim writer As Xml.XmlWriter = Xml.XmlWriter.Create("Policy.xml", settings)
        writer.WriteStartDocument()
        writer.WriteStartElement("ROOT", _namespaceDefault)
        writer.WriteElementString("Company", "12345")
        writer.WriteElementString("LOB", "ABCDEFG")
        writer.WriteStartElement("Policies")
        writer.WriteStartElement("Policy")
        writer.WriteElementString("PolicyNumber", "6789")
        writer.WriteElementString("Date", "01/24/2018")
        writer.WriteEndElement()  'Policy
        writer.WriteStartElement("Policy")
        writer.WriteElementString("PolicyNumber", "2345")
        writer.WriteElementString("Date", "03/17/2018")
        writer.WriteEndElement()  'Policy
        writer.WriteEndElement()  'Policies
        writer.WriteEndElement()  'ROOT
        writer.WriteEndDocument()

        writer.Close()

        writer = Nothing

输出是

    <?xml version="1.0" encoding="utf-8"?>
    <ROOT xmlns="AAIS_Homeowners_Premium">
      <Company>12345</Company>
      <LOB>ABCDEFG</LOB>
      <Policies>
        <Policy>
          <PolicyNumber>6789</PolicyNumber>
          <Date>01/24/2018</Date>
        </Policy>
        <Policy>
          <PolicyNumber>2345</PolicyNumber>
          <Date>03/17/2018</Date>
        </Policy>
      </Policies>
    </ROOT>

【讨论】:

  • 你检查这个帖子的答案了吗?它正在使用您的编码方法。
  • 感谢你们俩。这就是我一直在寻找的。虽然我确实使用 IAmNerd2000 的代码制作了一个工作版本。现在我有 2 份供将来参考。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-20
  • 1970-01-01
相关资源
最近更新 更多