Azure市场XML切碎 [英] Azure market place XML shreding

查看:95
本文介绍了Azure市场XML切碎的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述


我正在尝试从uri上从蔚蓝市场中找到MSFT转换器的平衡b
https://api.datamarket.azure.com/Services/My/Datasets

因此,代码段是:

Hi,
I am trying to find the balance of the MSFT translator from the azure marketplace b looking at the uri
https://api.datamarket.azure.com/Services/My/Datasets

So a code snippet is :

Uri targetUri = new Uri("https://api.datamarket.azure.com/Services/My/Datasets");  
NetworkCredential myCredentials = new NetworkCredential(myUserName, myAzureKey);             
WebClient myWebClient = new WebClient();            
myWebClient.Credentials = myCredentials;            
myWebClient.BaseAddress = myUrl;                            
string myResonse = myWebClient.DownloadString(targetUri);                 
XmlDocument myXmlDoc = new XmlDocument();                
myXmlDoc.LoadXml(myResonse);                
// Set up namespace manager for XPath                  
XmlNamespaceManager myXmlNamespaceManager = new XmlNamespaceManager(myXmlDoc.NameTable);                
myXmlNamespaceManager.AddNamespace("base", "https://api.datamarket.azure.com/Services.svc/My/Datasets");                
myXmlNamespaceManager.AddNamespace("d", "http://schemas.microsoft.com/ado/2007/08/dataservices");                
myXmlNamespaceManager.AddNamespace("m", "http://schemas.microsoft.com/ado/2007/08/dataservices/metadata");                
myXmlNamespaceManager.AddNamespace("", "http://www.w3.org/2005/Atom");                 
XmlNode myNode = myXmlDoc.LastChild;                
XmlNodeList myXmlNodeList = myNode.SelectNodes("entry/content/m:properties", myXmlNamespaceManager);  


.....

但是节点列表为空,因此我也无法访问已订阅的数据服务列表中的d:ResourceBalance属性.

有没有人建议我如何遍历DOM才能进入本条目-或Im做错了什么?

干杯

Peter


.....

But the nodelist is empty so I cannot get to the the d:ResourceBalance atribute in the list of data services subscribed too.

Has anyone suggestions as to how I can walk the DOM to get to this entry - or what Im doing wrong ?

Cheers

Peter

推荐答案


终于想通了-但如果有人可以提供更优雅的解决方案,请这样做!
无论如何-这是任何有兴趣的人的代码:
Hi,
finally figured it out - but if anyone can provide a more elegant solution please do!
Anyway - here is the code for anyone whose interested:
public static int countRemaining(string myUserName, string myAzureKey, string myAzureBalanceUrl)
        {
            string myNumber = string.Empty;
            int myReturn = 0;
            StreamReader StreamHandler;
            XmlDocument myXmlDoc = new XmlDocument();
            bool myTranslatorFlag = false;

            Uri targetUri = new Uri(myAzureBalanceUrl);
            NetworkCredential myCredentials = new NetworkCredential(myUserName, myAzureKey);

            try
            {
                HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(targetUri);
                myHttpWebRequest.Credentials = myCredentials;
                HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse();

                if (myHttpWebRequest.HaveResponse)
                {
                    if (myHttpWebResponse.StatusCode == HttpStatusCode.OK)
                    {
                        StreamHandler = new System.IO.StreamReader(myHttpWebResponse.GetResponseStream());
                        myXmlDoc.LoadXml(StreamHandler.ReadToEnd());

                        XmlNodeList myParentNodeList = myXmlDoc.ChildNodes;
                        XmlNode myFeed = myParentNodeList[0];
                        XmlNodeList myEntryList = myFeed.ChildNodes;

                        foreach (XmlNode myAzureNode in myEntryList)
                        {
                            if (myAzureNode.Name == "entry")
                            {
                                XmlNodeList myContent = myAzureNode.ChildNodes;
                                foreach (XmlNode myEntryNode in myContent)
                                {
                                    if (myEntryNode.Name == "title" && myEntryNode.InnerText == "Microsoft Translator")
                                    {
                                        myTranslatorFlag = true;
                                    }

                                    if (myEntryNode.Name == "content" && myTranslatorFlag)
                                    {
                                        XmlNodeList myTemp = myEntryNode.ChildNodes;
                                        XmlNode myTempNode = myTemp[0];
                                        XmlNodeList myProperties = myTempNode.ChildNodes;

                                        foreach (XmlNode myValueNode in myProperties)
                                        {
                                            if (myValueNode.Name == "d:ResourceBalance")
                                            {
                                                myNumber = myValueNode.InnerText;
                                            }
                                        }
                                    }
                                }
                            }
                        }

                    }
                }

            }
            catch (Exception)
            {
                myNumber = "0";
            }


            bool myTest = Int32.TryParse(myNumber, out myReturn);

            if (!myTest) myReturn = 0;

            return myReturn;
        }


这篇关于Azure市场XML切碎的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆