首页 > 解决方案 > 使用 LINQ 将 XML 文档解析为子 XML 文档

问题描述

我知道这必须在某个地方提出并回答,但我找不到它,所以我会再问一次。我有以下 vb.net 代码来提取 XML 文档。

    Dim getXML = "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=pubmed&retmode=xml&id=30076185,29253513"

    Dim doc As XDocument
    doc = XDocument.Load(getXML)
    Dim xmlDocs = doc.Root.Elements("PubmedArticle")

并将 PubmedArticleSet 元素拆分为 2 个 PubmedArticle,我需要做的是将每个 xml 文档作为 xml 保存到 MS SQL 数据库中,而不是作为仅文本的剥离字符串。

我的 SQL 代码是

        sql.Parameters.Add(New SqlParameter("@XMLData", SqlDbType.Xml)).Value = xmlDocs(i).Document.Root

我得到一个错误

     {"Failed to convert parameter value from a XElement to a String."} System.Exception {System.InvalidCastException}

我试过

     CSTR(xmlDocs(i).Document.Root)  

但这给出了不同的错误

      Message = "XML parsing: line 1, character 9668, illegal name character"

如果我使用相同的代码,但将 xml 剪切并粘贴到 TextBox 中,它工作正常,所以我必须假设这与我对 LINQ XML 文档缺乏了解有关。

感谢所有建议以帮助保存每个发布文档元素

更新:我可以使用带有以下代码的 XMLDocument 来做这件事。

        Dim docXML As New XmlDocument

        docXML.Load(getXML)

        For Each node As XmlNode In docXML.SelectNodes("/PubmedArticleSet/PubmedArticle")
            Dim pubmed As String = ""
            Dim xmlData As String = "<PubmedArticleSet><PubmedArticle>" + node.InnerXml + "</PubmedArticle></PubmedArticleSet>"
            'Data capture for Pubmed and pmc
            Dim node1a As XmlNodeList = node.SelectNodes("PubmedData/ArticleIdList")
            For Each node1a1 As XmlNode In node1a
                pubmed = node1a1.SelectSingleNode("ArticleId[@IdType='pubmed']").InnerText

            Next

            UpdateDatabaseXML(xmlData, pubmed, 1835)

        Next

LINQ 会做同样的事情还是我应该继续使用 XMLDocument?

标签: xmlvb.netlinq

解决方案


推荐阅读