可以';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
您可以使用以下任意一个--
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);