C# 用C语言解析XML#

C# 用C语言解析XML#,c#,xmlreader,C#,Xmlreader,我从ARIN得到了以下XML响应: <nets xmlns="http://www.arin.net/whoisrws/core/v1" xmlns:ns2="http://www.arin.net/whoisrws/rdns/v1" xmlns:ns3="http://www.arin.net/whoisrws/netref/v2" termsOfUse="https://www.arin.net/whois_tou.html"> <limitExceeded lim

我从ARIN得到了以下XML响应:

<nets xmlns="http://www.arin.net/whoisrws/core/v1" xmlns:ns2="http://www.arin.net/whoisrws/rdns/v1" xmlns:ns3="http://www.arin.net/whoisrws/netref/v2" termsOfUse="https://www.arin.net/whois_tou.html">
    <limitExceeded limit="256">false</limitExceeded>
    <net termsOfUse="https://www.arin.net/whois_tou.html">
        <registrationDate>2003-05-09T16:14:30-04:00</registrationDate>
        <ref>http://whois.arin.net/rest/net/NET-216-113-160-0-1</ref>
        <ns2:delegations termsOfUse="https://www.arin.net/whois_tou.html">
            <ns2:delegationRef name="186.113.216.in-addr.arpa.">http://whois.arin.net/rest/rdns/186.113.216.in-addr.arpa.</ns2:delegationRef>
            <ns2:delegationRef name="165.113.216.in-addr.arpa.">http://whois.arin.net/rest/rdns/165.113.216.in-addr.arpa.</ns2:delegationRef>
            <ns2:delegationRef name="173.113.216.in-addr.arpa.">http://whois.arin.net/rest/rdns/173.113.216.in-addr.arpa.</ns2:delegationRef>
            <ns2:delegationRef name="189.113.216.in-addr.arpa.">http://whois.arin.net/rest/rdns/189.113.216.in-addr.arpa.</ns2:delegationRef>
            <ns2:delegationRef name="169.113.216.in-addr.arpa.">http://whois.arin.net/rest/rdns/169.113.216.in-addr.arpa.</ns2:delegationRef>
            <ns2:delegationRef name="167.113.216.in-addr.arpa.">http://whois.arin.net/rest/rdns/167.113.216.in-addr.arpa.</ns2:delegationRef>
            <ns2:delegationRef name="171.113.216.in-addr.arpa.">http://whois.arin.net/rest/rdns/171.113.216.in-addr.arpa.</ns2:delegationRef>
            <ns2:delegationRef name="166.113.216.in-addr.arpa.">http://whois.arin.net/rest/rdns/166.113.216.in-addr.arpa.</ns2:delegationRef>
            <ns2:delegationRef name="190.113.216.in-addr.arpa.">http://whois.arin.net/rest/rdns/190.113.216.in-addr.arpa.</ns2:delegationRef>
            <ns2:delegationRef name="188.113.216.in-addr.arpa.">http://whois.arin.net/rest/rdns/188.113.216.in-addr.arpa.</ns2:delegationRef>
            <ns2:delegationRef name="176.113.216.in-addr.arpa.">http://whois.arin.net/rest/rdns/176.113.216.in-addr.arpa.</ns2:delegationRef>
            <ns2:delegationRef name="172.113.216.in-addr.arpa.">http://whois.arin.net/rest/rdns/172.113.216.in-addr.arpa.</ns2:delegationRef>
            <ns2:delegationRef name="170.113.216.in-addr.arpa.">http://whois.arin.net/rest/rdns/170.113.216.in-addr.arpa.</ns2:delegationRef>
            <ns2:delegationRef name="191.113.216.in-addr.arpa.">http://whois.arin.net/rest/rdns/191.113.216.in-addr.arpa.</ns2:delegationRef>
            <ns2:delegationRef name="174.113.216.in-addr.arpa.">http://whois.arin.net/rest/rdns/174.113.216.in-addr.arpa.</ns2:delegationRef>
            <ns2:delegationRef name="162.113.216.in-addr.arpa.">http://whois.arin.net/rest/rdns/162.113.216.in-addr.arpa.</ns2:delegationRef>
            <ns2:delegationRef name="185.113.216.in-addr.arpa.">http://whois.arin.net/rest/rdns/185.113.216.in-addr.arpa.</ns2:delegationRef>
            <ns2:delegationRef name="180.113.216.in-addr.arpa.">http://whois.arin.net/rest/rdns/180.113.216.in-addr.arpa.</ns2:delegationRef>
            <ns2:delegationRef name="168.113.216.in-addr.arpa.">http://whois.arin.net/rest/rdns/168.113.216.in-addr.arpa.</ns2:delegationRef>
            <ns2:delegationRef name="175.113.216.in-addr.arpa.">http://whois.arin.net/rest/rdns/175.113.216.in-addr.arpa.</ns2:delegationRef>
            <ns2:delegationRef name="161.113.216.in-addr.arpa.">http://whois.arin.net/rest/rdns/161.113.216.in-addr.arpa.</ns2:delegationRef>
            <ns2:delegationRef name="179.113.216.in-addr.arpa.">http://whois.arin.net/rest/rdns/179.113.216.in-addr.arpa.</ns2:delegationRef>
            <ns2:delegationRef name="177.113.216.in-addr.arpa.">http://whois.arin.net/rest/rdns/177.113.216.in-addr.arpa.</ns2:delegationRef>
            <ns2:delegationRef name="183.113.216.in-addr.arpa.">http://whois.arin.net/rest/rdns/183.113.216.in-addr.arpa.</ns2:delegationRef>
            <ns2:delegationRef name="181.113.216.in-addr.arpa.">http://whois.arin.net/rest/rdns/181.113.216.in-addr.arpa.</ns2:delegationRef>
            <ns2:delegationRef name="187.113.216.in-addr.arpa.">http://whois.arin.net/rest/rdns/187.113.216.in-addr.arpa.</ns2:delegationRef>
            <ns2:delegationRef name="163.113.216.in-addr.arpa.">http://whois.arin.net/rest/rdns/163.113.216.in-addr.arpa.</ns2:delegationRef>
            <ns2:delegationRef name="184.113.216.in-addr.arpa.">http://whois.arin.net/rest/rdns/184.113.216.in-addr.arpa.</ns2:delegationRef>
            <ns2:delegationRef name="160.113.216.in-addr.arpa.">http://whois.arin.net/rest/rdns/160.113.216.in-addr.arpa.</ns2:delegationRef>
            <ns2:delegationRef name="182.113.216.in-addr.arpa.">http://whois.arin.net/rest/rdns/182.113.216.in-addr.arpa.</ns2:delegationRef>
            <ns2:delegationRef name="178.113.216.in-addr.arpa.">http://whois.arin.net/rest/rdns/178.113.216.in-addr.arpa.</ns2:delegationRef>
            <ns2:delegationRef name="164.113.216.in-addr.arpa.">http://whois.arin.net/rest/rdns/164.113.216.in-addr.arpa.</ns2:delegationRef>
        </ns2:delegations>
        <endAddress>216.113.191.255</endAddress>
        <handle>NET-216-113-160-0-1</handle>
        <name>EBAY-QA-IT-1</name>
        <netBlocks>
            <netBlock>
                <cidrLength>19</cidrLength>
                <endAddress>216.113.191.255</endAddress>
                <description>Direct Assignment</description>
                <type>DS</type>
                <startAddress>216.113.160.0</startAddress>
            </netBlock>
        </netBlocks>
        <pocs termsOfUse="https://www.arin.net/whois_tou.html"/>
        <orgRef name="eBay, Inc" handle="EBAY">http://whois.arin.net/rest/org/EBAY</orgRef>
        <parentNetRef name="NET216" handle="NET-216-0-0-0-0">http://whois.arin.net/rest/net/NET-216-0-0-0-0</parentNetRef>
        <startAddress>216.113.160.0</startAddress>
        <updateDate>2012-03-02T08:03:18-05:00</updateDate>
        <version>4</version>
    </net>
</nets>

假的
2003-05-09T16:14:30-04:00
http://whois.arin.net/rest/net/NET-216-113-160-0-1
http://whois.arin.net/rest/rdns/186.113.216.in-addr.arpa.
http://whois.arin.net/rest/rdns/165.113.216.in-addr.arpa.
http://whois.arin.net/rest/rdns/173.113.216.in-addr.arpa.
http://whois.arin.net/rest/rdns/189.113.216.in-addr.arpa.
http://whois.arin.net/rest/rdns/169.113.216.in-addr.arpa.
http://whois.arin.net/rest/rdns/167.113.216.in-addr.arpa.
http://whois.arin.net/rest/rdns/171.113.216.in-addr.arpa.
http://whois.arin.net/rest/rdns/166.113.216.in-addr.arpa.
http://whois.arin.net/rest/rdns/190.113.216.in-addr.arpa.
http://whois.arin.net/rest/rdns/188.113.216.in-addr.arpa.
http://whois.arin.net/rest/rdns/176.113.216.in-addr.arpa.
http://whois.arin.net/rest/rdns/172.113.216.in-addr.arpa.
http://whois.arin.net/rest/rdns/170.113.216.in-addr.arpa.
http://whois.arin.net/rest/rdns/191.113.216.in-addr.arpa.
http://whois.arin.net/rest/rdns/174.113.216.in-addr.arpa.
http://whois.arin.net/rest/rdns/162.113.216.in-addr.arpa.
http://whois.arin.net/rest/rdns/185.113.216.in-addr.arpa.
http://whois.arin.net/rest/rdns/180.113.216.in-addr.arpa.
http://whois.arin.net/rest/rdns/168.113.216.in-addr.arpa.
http://whois.arin.net/rest/rdns/175.113.216.in-addr.arpa.
http://whois.arin.net/rest/rdns/161.113.216.in-addr.arpa.
http://whois.arin.net/rest/rdns/179.113.216.in-addr.arpa.
http://whois.arin.net/rest/rdns/177.113.216.in-addr.arpa.
http://whois.arin.net/rest/rdns/183.113.216.in-addr.arpa.
http://whois.arin.net/rest/rdns/181.113.216.in-addr.arpa.
http://whois.arin.net/rest/rdns/187.113.216.in-addr.arpa.
http://whois.arin.net/rest/rdns/163.113.216.in-addr.arpa.
http://whois.arin.net/rest/rdns/184.113.216.in-addr.arpa.
http://whois.arin.net/rest/rdns/160.113.216.in-addr.arpa.
http://whois.arin.net/rest/rdns/182.113.216.in-addr.arpa.
http://whois.arin.net/rest/rdns/178.113.216.in-addr.arpa.
http://whois.arin.net/rest/rdns/164.113.216.in-addr.arpa.
216.113.191.255
NET-216-113-160-0-1
易趣-QA-IT-1
19
216.113.191.255
直接指派
DS
216.113.160.0
http://whois.arin.net/rest/org/EBAY
http://whois.arin.net/rest/net/NET-216-0-0-0-0
216.113.160.0
2012-03-02T08:03:18-05:00
4.
我正在尝试获取以下信息:

从这一行:

<orgRef name="eBay, Inc" handle="EBAY">http://whois.arin.net/rest/org/EBAY</orgRef>
http://whois.arin.net/rest/org/EBAY
如何使用C#?

和Linq Xml(可在.Net 3.5及更高版本中获得)获取此信息您可以使用以下代码片段:

XNamespace xns = "http://www.arin.net/whoisrws/core/v1"; //The default xmlns from the root element.

var orgRefHandle =
  XDocument.Parse(xml)
  .Root
  .Element(xns + "net")
  .Element(xns + "orgRef")
  .Attribute("handle").Value;
使用Linq Xml(可在.Net 3.5及更高版本中获得),您可以使用以下代码段完成此操作:

XNamespace xns = "http://www.arin.net/whoisrws/core/v1"; //The default xmlns from the root element.

var orgRefHandle =
  XDocument.Parse(xml)
  .Root
  .Element(xns + "net")
  .Element(xns + "orgRef")
  .Attribute("handle").Value;

一种方法是使用
XmlDocument

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(xmlString);

foreach(XmlElement ele in xmlDoc.DocumentElement.GetElementsByTagName("net"))
{
    // Writes value to console.
    Console.WriteLine(((XmlElement)ele.GetElementsByTagName("orgRef")).Attributes["handle"].Value);
}

一种方法是使用
XmlDocument

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(xmlString);

foreach(XmlElement ele in xmlDoc.DocumentElement.GetElementsByTagName("net"))
{
    // Writes value to console.
    Console.WriteLine(((XmlElement)ele.GetElementsByTagName("orgRef")).Attributes["handle"].Value);
}

将内容加载到XmlDocument中,然后您可以使用XPath查询通过SelectSingleNode获取节点的属性:
/nets/limitextended/net/orgref/@Name
并获取值。

将内容加载到XmlDocument中,然后您可以使用XPath查询通过SelectSingleNode获取节点的属性:
/nets/limitextended/net/orgref/@Name
并获取值。

我试图用XML/XmlReader解析XML,但这似乎有些过分。也许有人能帮我确定我可以使用什么正则表达式规则?@Sugitime正则表达式不适合解析XML。为什么不直接使用LINQtoXML或XmlReader呢?这就是它们的用途。@Sugitime,请不要尝试使用正则表达式来解析XML,这会使解析变得更困难,而不是更容易。看,实际上XmlReader并不是一个坏主意。到目前为止,答案是读取整个XML并将其存储到内存中,这在这里并不是必需的。使用XMLReader打开XML并使用。然后你只需要得到你需要的属性,我试图用XML/XmlReader解析XML,但这似乎有些过头了。也许有人能帮我确定我可以使用什么正则表达式规则?@Sugitime正则表达式不适合解析XML。为什么不直接使用LINQtoXML或XmlReader呢?这就是它们的用途。@Sugitime,请不要尝试使用正则表达式来解析XML,这会使解析变得更困难,而不是更容易。看,实际上XmlReader并不是一个坏主意。到目前为止,答案是读取整个XML并将其存储到内存中,这在这里并不是必需的。使用XMLReader打开XML并使用。然后你只需要得到你需要的属性。@Sugitime-Cool。您可能希望找到一种简单的方法来测试您的LINQXML。@Sugitime-Cool。你可能想用一种简单的方法测试你的Linq-Xml。是的,我也不确定你是否想要处理多个网络元素的能力。是的,我也不确定你是否想要处理多个网络元素的能力。