可以';t分析XRDS文档中的XML

本文关键字:文档 XML XRDS 分析 可以 | 更新日期: 2023-09-27 18:25:57

如何解析下面的XML?我想可能是我的代码无法理解起点。我已经尝试了下面的两种技术,但都不起作用。

Response.Write(xmlDoc.SelectSingleNode("/xrds/XRD").InnerXml);  //Parse it - failed
Response.Write(xmlDoc.SelectSingleNode("/XRD").InnerXml);       //failed
System.Xml.XmlDocument xmlDoc = new System.Xml.XmlDocument();
string gtest = "<?xml version='"1.0'" encoding='"UTF-8'"?><xrds:XRDS xmlns:xrds='"xri://$xrds'" xmlns='"xri://$xrd*($v*2.0)'"><XRD><Service priority='"0'"><Type>http://specs.openid.net/auth/2.0/server</Type><Type>http://openid.net/sreg/1.0</Type> <URI>https://www.mydomain.com/login</URI></Service></XRD></xrds:XRDS>";
xmlDoc.LoadXml(gtest);//Load data into the xml.
Response.Write(xmlDoc.SelectSingleNode("/xrds/XRD").InnerXml);//Parse XML

可以';t分析XRDS文档中的XML

您可以使用以下任意一个--

xmlDoc.GetElementsByTagName("XRD")[0].InnerXml
xmlDoc.DocumentElement.ChildNodes[0].InnerXml

但如果你有多个XRD节点,那么你可以迭代所有这些节点并解析它们。

        XmlDocument xmlDoc = new XmlDocument();
        string gtest = "<?xml version='"1.0'" encoding='"UTF-8'"?><xrds:XRDS xmlns:xrds='"xri://$xrds'" xmlns='"xri://$xrd*($v*2.0)'"><XRD><Service priority='"0'"><Type>http://specs.openid.net/auth/2.0/server</Type><Type>http://openid.net/sreg/1.0</Type> <URI>https://www.mydomain.com/login</URI></Service></XRD></xrds:XRDS>";
        xmlDoc.LoadXml(gtest);//Load data into the xml.
        XmlNodeList nodeList = xmlDoc.GetElementsByTagName("XRD");
        foreach (XmlNode node in nodeList)
        {
            Console.Write(node.InnerXml);
        }

您需要告诉它名称空间,使用XPath之类的东西,比如select single node。

xrds:xrds不是xrds,要使用用命名空间限定的标记名,需要重载并在文档中传递namespces,这样xrds就可以与它的URI匹配。

例如

XmlNamespaceManager nsmgr = new XmlNamespaceManager(xmlDoc.NameTable);
Response.Write(xmlDoc.SelectSingleNode("/xrds:XRDS/XRD",nsmgr).InnerXml);