【问题标题】:How to find a specific XML node and delete its parent node?如何找到特定的 XML 节点并删除其父节点?
【发布时间】:2012-06-12 08:47:58
【问题描述】:

我有一个这样的 XML 文件

<abc>
  <ab>value</ab>
  <aa>time</aa>
  <ac>money</ac>
</abc>
<abc>
  <ab>right</ab>
  <aa>left</aa>
  <ac>straight</ac>
</abc>

我想要的是我能够找到具有“左”值的节点,然后删除它的父节点,这样我最终得到的是

<abc>
  <ab>value</ab>
  <aa>time</aa>
  <ac>money</ac>
</abc>

提前致谢

【问题讨论】:

  • 无效的XML,你只能有一个顶级元素!也就是说,我想你可以编写代码来手动解析这个伪 XML。
  • 嘿鲍勃。我在这里只写了一个伪 xml。实际上,我需要找到一个特定的节点并将其删除:)

标签: xml vb6 xml-parsing


【解决方案1】:

如果通过添加文档元素将其更正为有效的 XML:

<doc>
    <abc>
        <ab>value</ab>
        <aa>time</aa>
        <ac>money</ac>
    </abc>
    <abc>
        <ab>right</ab>
        <aa>left</aa>
        <ac>straight</ac>
    </abc>
</doc>

你可以这样做:

Dim DOM As MSXML2.DOMDocument
Dim Node As MSXML2.IXMLDOMNode

Set DOM = New MSXML2.DOMDocument
With DOM
    .async = False
    .preserveWhiteSpace = True
    If .Load("sample.xml") Then
        .setProperty "SelectionLanguage", "XPath"
        Set Node = .selectSingleNode("//*[.='left']")
        If Not Node Is Nothing Then
            .documentElement.removeChild Node.parentNode
            On Error Resume Next
            Kill "sample.xml"
            On Error GoTo 0
            .save "sample.xml"
            MsgBox "Done, saved as sample.xml"
        Else
            MsgBox "No ""left"" found"
        End If
    Else
        MsgBox "Load failed!" & vbNewLine & vbNewLine _
             & CStr(.parseError.errorCode) & " " _
             & .parseError.reason
    End If
End With

【讨论】:

  • 嗨,即使我使用 selectSingleNode 使用相同的逻辑。不同之处在于我使用的是 selectSingleNode("left")。额外的 ("//*[.='left']") 对我有用。如果它不打扰你,你能解释一下区别。感谢鲍勃的帮助。 :)
  • XPath 专家可能会嘲笑我使用的东西,我更喜欢自己工作的更好的答案。 AFAIK 这句话类似于“(//) 从这一点递归下降,(*) 任何标签,([]) 过滤节点,(.) 节点本身,(='left') 的文本相等'左'”,但我可能是错的。
  • 哦,我认为您更简单的 XPath 表达式是在说“标签名称为 'left' 的子节点”。也许某个好心人会发布一个指向 XPath 引用的链接,该引用不是从试图实现 XPath 解析器但实际使用 XPath 的人的角度编写的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-02-17
  • 2021-06-11
  • 1970-01-01
  • 1970-01-01
  • 2013-02-11
  • 1970-01-01
  • 2021-11-07
相关资源
最近更新 更多