按其属性值获取XElement

时间:2015-02-23 14:12:03

标签: vb.net linq-to-xml xelement

我有以下XML:

<rootNode>
  ... some stuff
  <ReportCellRef>
    <dang n="DVCompany" h="0" u="0" o="0" fmt="0">
      ... some stuff
    </dang>
  </ReportCellRef>
</rootNode>

我希望将<dang ...> ... </dang>节点作为XElement,因此我可以将其替换为另一个节点,前提是我具有n属性的值。

我有这段代码:

Dim nameToSearch = importNode.Attribute("n").Value
Dim replaceable = From dangToTake In xdoc.Elements("ReportCellRef") _
                  Where CStr(dangToTake.Element("dang").Attribute("n")) = nameToSearch
                  Select dangToTake

For Each nodeToReplace As XElement In replaceable
    nodeToReplace.ReplaceWith(importNode)
Next nodeToReplace

但是LINQ查询不会产生任何结果......有什么想法吗?

2 个答案:

答案 0 :(得分:1)

您正在将XAttribute与其值进行比较。 CStr(dangToTake.Element("dang").Attribute("n"))未向您提供该属性的值。请改为dangToTake.Element("dang").Attribute("n").Value

答案 1 :(得分:0)

在那里扔一个“后代()”电话:

dim xdoc as XDocument = XDocument.Parse("<rootNode><ReportCellRef><dang n=""DVCompany"" h=""0"" u=""0"" o=""0"" fmt=""0""></dang></ReportCellRef></rootNode>")
Dim replaceable = From dangToTake In xdoc.Descendants().Elements("ReportCellRef") _
              Where dangToTake.Element("dang").Attribute("n").Value = "DVCompany"
              Select dangToTake