简体   繁体   English

从C#中的XML获取特定部分作为XML字符串

[英]Getting specific part as XML string from XML in C#

I have a bit problem trying to get specific sub-parent from XML and parse it as separate XDocument. 我在尝试从XML获取特定的父级并将其解析为单独的XDocument时遇到了一些问题。 For example here is the hole XML: 例如,这里是孔XML:

<?xml version='1.0' encoding="UTF-8" standalone="no"?>
<OPS_envelope>
    <header>
        <version>0.9</version>
    </header>
    <body>
        <data_block>
            <dt_assoc>
                <item key="protocol">XCP</item>
                <item key="object">DOMAIN</item>
                <item key="response_text">Query Successful</item>
                <item key="action">REPLY</item>
                <item key="attributes">
                    <dt_assoc>
                        <item key="auto_renew">1</item>
                        <item key="contact_set">
                            <dt_assoc>
                                <item key="admin">
                                    <dt_assoc>
                                        <item key="country">US</item>
                                        <item key="address3">Admin</item>
                                        <item key="org_name">Example Inc.</item>
                                        <item key="phone">+1.4165550123x1812</item>
                                        <item key="last_name">Adams</item>
                                        <item key="address2">Suite 100</item>
                                        <item key="status">active</item>
                                        <item key="state">CA</item>
                                        <item key="email">adams@example.com</item>
                                        <item key="city">Santa Clara</item>
                                        <item key="postal_code">90210</item>
                                        <item key="fax">+1.4165550125</item>
                                        <item key="address1">32 Oak Street</item>
                                        <item key="first_name">Adler</item>
                                    </dt_assoc>
                                </item>
                                <item key="owner">
                                    <dt_assoc>
                                        <item key="country">US</item>
                                        <item key="address3">Owner</item>
                                        <item key="status">active</item>
                                        <item key="org_name">Example Inc.</item>
                                        <item key="phone">+1.4165550123x1902</item>
                                        <item key="last_name">Ottway</item>
                                        <item key="address2">Suite 500</item>
                                        <item key="state">CA</item>
                                        <item key="email">ottway@example.com</item>
                                        <item key="city">SomeCity</item>
                                        <item key="postal_code">90210</item>
                                        <item key="fax">+1.4165550124</item>
                                        <item key="address1">32 Oak Street</item>
                                        <item key="first_name">Owen</item>
                                    </dt_assoc>
                                </item>
                                <item key="billing">
                                    <dt_assoc>
                                        <item key="country">US</item>
                                        <item key="address3">Billing</item>
                                        <item key="org_name">Example Inc.</item>
                                        <item key="phone">+1.4165550123x1248</item>
                                        <item key="last_name">Burton</item>
                                        <item key="address2">Suite 200</item>
                                        <item key="status">active</item>
                                        <item key="state">CA</item>
                                        <item key="email">burton@example.com</item>
                                        <item key="city">Santa Clara</item>
                                        <item key="postal_code">90210</item>
                                        <item key="fax">+1.4165550136</item>
                                        <item key="address1">32 Oak Street</item>
                                        <item key="first_name">Bill</item>
                                    </dt_assoc>
                                </item>
                            </dt_assoc>
                        </item>
                        <item key="registry_updatedate">2016-04-22 05:36:05</item>
                        <item key="sponsoring_rsp">1</item>
                        <item key="registry_createdate">2010-01-03 06:48:18</item>
                        <item key="affiliate_id"></item>
                        <item key="expiredate">2017-01-03 06:48:18</item>
                        <item key="let_expire">0</item>
                        <item key="tld_data"></item>
                        <item key="registry_expiredate">2017-01-03 06:48:18</item>
                        <item key="nameserver_list">
                            <dt_array>
                                <item key="0">
                                    <dt_assoc>
                                        <item key="ipaddress">21.40.33.21</item> <item key="sortorder">1</item>
                                        <item key="name">ns1.systemdns.com</item>
                                    </dt_assoc>
                                </item>
                                <item key="1">
                                    <dt_assoc>
                                        <item key="ipaddress">207.136.100.142</item>
                                        <item key="sortorder">2</item>
                                        <item key="name">ns2.systemdns.com</item>
                                    </dt_assoc>
                                </item>
                                <item key="2">
                                    <dt_assoc>
                                        <item key="ipaddress">24.22.23.28</item>
                                        <item key="sortorder">3</item>
                                        <item key="name">patrick.example.com</item>
                                    </dt_assoc>
                                </item>
                                <item key="3">
                                    <dt_assoc>
                                        <item key="ipaddress">24.22.23.24</item>
                                        <item key="sortorder">4</item>
                                        <item key="name">qa1.example.com</item>
                                    </dt_assoc>
                                </item>
                                <item key="4">
                                    <dt_assoc>
                                        <item key="ipaddress">24.22.23.25</item>
                                        <item key="sortorder">5</item>
                                        <item key="name">qa2.example.com</item>
                                    </dt_assoc>
                                </item>
                            </dt_array>
                        </item>
                    </dt_assoc>
                </item>
                <item key="response_code">200</item>
                <item key="is_success">1</item>
            </dt_assoc>
        </data_block>
    </body>
</OPS_envelope>

What i want to do is to get every item where key is admin, owner or billing and parse it as separate XML but so far i am able to parse only the hole XML. 我想做的是获取键为admin,所有者或账单的每个项目,并将其解析为单独的XML,但到目前为止,我仅能够解析漏洞XML。 I am trying to do 我正在尝试做

var admin = keys.Where(item => item.Attribute("key").Value == "admin").ToList();

to be able to get as string only this part of the XML: 才能仅将XML的以下部分作为字符串获取:

<item key="admin">
                                    <dt_assoc>
                                        <item key="country">US</item>
                                        <item key="address3">Admin</item>
                                        <item key="org_name">Example Inc.</item>
                                        <item key="phone">+1.4165550123x1812</item>
                                        <item key="last_name">Adams</item>
                                        <item key="address2">Suite 100</item>
                                        <item key="status">active</item>
                                        <item key="state">CA</item>
                                        <item key="email">adams@example.com</item>
                                        <item key="city">Santa Clara</item>
                                        <item key="postal_code">90210</item>
                                        <item key="fax">+1.4165550125</item>
                                        <item key="address1">32 Oak Street</item>
                                        <item key="first_name">Adler</item>
                                    </dt_assoc>
                                </item>

but i am making some mistakes and i cant understand what. 但是我犯了一些错误,我不明白是什么。 Can someone help me? 有人能帮我吗?

Have a look at following sample: 看看以下示例:

public class Program
{
    public static void Main(string[] args)
    {
        var result = ExtractItem("admin");
        Console.WriteLine(result);
        Console.ReadKey();
    }

    public static string ExtractItem(string key)
    {
        var xmlString = Properties.Resource.xml; // your sample-xml-string here
        var xmlDoc = XDocument.Parse(xmlString);

        var element = xmlDoc.Descendants().FirstOrDefault(i => i.Attribute("key")?.Value == key);
        return element?.ToString();
    }
}

Prints following output: 打印以下输出:

<item key="admin">
  <dt_assoc>
    <item key="country">US</item>
    <item key="address3">Admin</item>
    <item key="org_name">Example Inc.</item>
    <item key="phone">+1.4165550123x1812</item>
    <item key="last_name">Adams</item>
    <item key="address2">Suite 100</item>
    <item key="status">active</item>
    <item key="state">CA</item>
    <item key="email">adams@example.com</item>
    <item key="city">Santa Clara</item>
    <item key="postal_code">90210</item>
    <item key="fax">+1.4165550125</item>
    <item key="address1">32 Oak Street</item>
    <item key="first_name">Adler</item>
  </dt_assoc>
</item>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM