如何获取父节点的子节点的子节点的值

时间:2019-12-13 14:08:31

标签: c# .net xml linq-to-xml

我知道这个问题似乎很混乱,因为它对我来说很混乱。我认为我最好以身作则。我有一个部分xml文件,如下所示。我需要获取VALUE节点的DIALVALUE子节点的值,但是要获取正确的值,我需要通过DIALVALUE id属性找到正确的DIAL节点。 DIALVALUE节点在xml文件中被列出71次,所需的值不正确。如何做到这一点?

<?xml version="1.0" encoding="utf-16"?>
<OrderXml>
    <DialValues>
      <DialValue>
        <Dial id="11144" externalId="">
          <PlanName>pg1_CreditUnionName</PlanName>
          <DisplayName>Credit Union Name:</DisplayName>
        </Dial>
        <Value>Alexis Nab Credit Union</Value>
      </DialValue>
      <DialValue>
        <Dial id="11145" externalId="">
          <PlanName>pg1_CharterNumber</PlanName>
          <DisplayName>Charter Number:</DisplayName>
        </Dial>
        <Value>9999</Value>
      </DialValue>
      <DialValue>
        <Dial id="11146" externalId="">
          <PlanName>pg1_ContactNameFirst</PlanName>
          <DisplayName>Solution Main Contact First Name:</DisplayName>
        </Dial>
        <Value>Alexis</Value>
      </DialValue>
      <DialValue>
    </DialValues>
<OrderXml>

2 个答案:

答案 0 :(得分:1)

这应该给你一个主意(注意:包括空处理等)。

var value = XDocument.Parse(xml)
                .Descendants("Dial")
                .Single(el => el.Attribute("id").Value == "11145")
                .Parent
                .Descendants("Value")
                .Single().Value;

答案 1 :(得分:1)

使用字典:

class BST:

 def __init__(self, root=None):

    self.root = root

 def in_order_traversal(self):

    arr = []
    if self.root is not None:
        self.in_order_traversal(self.root.left)
        print(" "+str(self.root.key)+" ")
        arr.append(self.root.key)
        self.in_order_traversal(self.root.right)

    return arr
    pass

def main():
   bst = BST()
   bst.in_order_traversal()

main()