【问题标题】:How to Parse XML without throwing exceptions on comments in file如何解析 XML 而不会对文件中的注释抛出异常
【发布时间】:2021-02-04 08:43:06
【问题描述】:

我基本上在 VB.NET 中有这段代码

xmlline = "<elements>etc..</elements> <!-- Some random Comment -->"
Dim XMLInput As XElement
XMLInput = XElement.Parse(xmlline)

并且评论正在抛出并且异常,但是我放置它。 作为“双根元素”和“意外的评论结束”

并且已经看到一些建议使用此阅读器而不是可选参数

Dim xmlsettings As New XmlReaderSettings With {
    .IgnoreComments = True
}
XmlReader.Create(XMLtextfile, xmlsettings)

但无法让它工作,此外,访问树的不同部分的 Xelement 方式对我来说非常有用。

喜欢这样做:Dim XMLROOT As XElement = XMLInput.Element("ImportData").Element("UsagePoints").Element("UsagePoint") XMLROOT.Element("Address").Element("Street").Value

那么我怎样才能读取包含带有 cmets 的 XML 结构的 XML 文本文件而不会出错呢?

【问题讨论】:

标签: vb.net parsing comments xmlreader xelement


【解决方案1】:

感谢 cmets 中的 @jimi 将我指向此链接中的答案 Remove all comments from XDocument

我就是这样解决的:

Dim fs As New FileStream(myfiles(y).FullName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)
Dim sr As New StreamReader(fs)
line = sr.ReadToEnd
Dim doc As XDocument = XDocument.Parse(line)
doc.DescendantNodes.OfType(Of XComment).Remove
line = doc.ToString

是的,我不能在 xdocument 或任何其他程序中使用 LOAD 函数,因为我正在尝试读取的文件正在被另一个进程使用,但这就像一个魅力!

【讨论】:

    【解决方案2】:

    字符串必须是正确的 XML 才能工作。

        Dim xmlline As String = "<elements><t>foo</t><t>bar</t><!-- Some random Comment --></elements>"
        Dim XMLInput As XElement
        XMLInput = XElement.Parse(xmlline)
    

    编辑:

        Dim comment As String = "Some random Comment"
        Dim xmlline As String = "<elements><t>foo</t><t>bar</t></elements>"
        Dim XMLInput As XElement
        XMLInput = XElement.Parse(xmlline)
    
        Dim xdoc As New XDocument(XMLInput)
        xdoc.Add(New XComment(comment))
    

    【讨论】:

    • 不,在 XML 标准 w3.org/TR/xml 中允许元素之外的 cmets 我只需要对其进行清理,因为 XElement.parse 函数无法处理它,所以如何处理。
    • @Gabriel - 标准说,“......在其他标记之外的文档中;” XElement 不是文档。请参阅编辑以了解可能的解决方法。
    • 那是添加评论?但现在我知道 Xdocument 可以按照@jimi 的链接删除所有 cmets,它就像一个魅力。在 XML 中,
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-04
    • 2017-12-08
    • 2012-01-24
    • 2020-04-17
    相关资源
    最近更新 更多