[英]Getting specific part as XML string from XML in C#
我在嘗試從XML獲取特定的父級並將其解析為單獨的XDocument時遇到了一些問題。 例如,這里是孔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>
我想做的是獲取鍵為admin,所有者或賬單的每個項目,並將其解析為單獨的XML,但到目前為止,我僅能夠解析漏洞XML。 我正在嘗試做
var admin = keys.Where(item => item.Attribute("key").Value == "admin").ToList();
才能僅將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>
但是我犯了一些錯誤,我不明白是什么。 有人能幫我嗎?
看看以下示例:
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();
}
}
打印以下輸出:
<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.