根据兄弟节点选择树中的节点

本文关键字:节点 选择 兄弟 | 更新日期: 2023-09-27 18:08:19

我在解析节点树时遇到了一个问题。下面是我正在使用的一个示例XML文档:

<result>
    <type>street_address</type>
    <formatted_address>Krasickiego 6, 83-020 Cedry Wielkie, Poland</formatted_address>
    <address_component>
        <long_name>6</long_name>
        <short_name>6</short_name>
        <type>street_number</type>
    </address_component>
    <address_component>
        <long_name>Krasickiego</long_name>
        <short_name>Krasickiego</short_name>
        <type>route</type>
    </address_component>
    <address_component>
        <long_name>Cedry Wielkie</long_name>
        <short_name>Cedry Wielkie</short_name>
        <type>locality</type>
        <type>political</type>
    </address_component>
    <address_component>
        <long_name>Gmina Cedry Wielkie</long_name>
        <short_name>Gmina Cedry Wielkie</short_name>
        <type>administrative_area_level_3</type>
        <type>political</type>
    </address_component>
    <address_component>
        <long_name>Gdańsk County</long_name>
        <short_name>Gdańsk County</short_name>
        <type>administrative_area_level_2</type>
        <type>political</type>
    </address_component>
    <address_component>
        <long_name>Pomeranian Voivodeship</long_name>
        <short_name>Pomeranian Voivodeship</short_name>
        <type>administrative_area_level_1</type>
        <type>political</type>
    </address_component>
    <address_component>
        <long_name>Poland</long_name>
        <short_name>PL</short_name>
        <type>country</type>
        <type>political</type>
    </address_component>
    <address_component>
        <long_name>83-020</long_name>
        <short_name>83-020</short_name>
        <type>postal_code</type>
    </address_component>
</result>

我想从这棵树中获得国家代码(PL)和邮政编码(83-020)。我相信我能够在树中搜索包含文本"country"answers"postal_code"的节点,并获取具有正确名称的兄弟节点(例如,搜索"country"并获取名为"short_name"的兄弟节点),但我不确定如何搜索。我能在正确的方向上得到帮助吗?我正在使用c#和XPath。

根据兄弟节点选择树中的节点

这个XPath查询应该返回short_name节点,该节点有一个名为type的兄弟节点,其值为"postal_code":

XmlNode node = doc.SelectSingleNode("result/address_component[type='postal_code']/short_name")

按同样的方法查找国家代码:

XmlNode node = doc.SelectSingleNode("result/address_component[type='country']/short_name")