Skip to main content
 首页 » 编程设计

c#之如何从 Web 服务中读取 XML 并在 C# 中查询行集属性

2024年02月02日27linjiqin

这是我从网络服务收到的示例 XML。

<xml xmlns:s='uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882' 
xmlns:dt='uuid:C2F41010-65B3-11d1-A29F-00AA00C14882' 
xmlns:rs='urn:schemas-microsoft-com:rowset' 
xmlns:z='#RowsetSchema'> 
<s:Schema id='RowsetSchema'> 
<s:ElementType name='row' content='eltOnly'> 
    <s:AttributeType name='NAME' rs:number='1'> 
        <s:datatype dt:type='string' rs:dbtype='str' dt:maxLength='25' 
         rs:maybenull='false'/> 
    </s:AttributeType> 
    <s:AttributeType name='DESCRIPTION' rs:number='2' rs:nullable='true' 
         rs:writeunknown='true'> 
        <s:datatype dt:type='string' rs:dbtype='str' dt:maxLength='80'/> 
    </s:AttributeType> 
    <s:extends type='rs:rowbase'/> 
</s:ElementType> 
</s:Schema> 
<rs:data> 
<z:row NAME='JOE BLOW' DESCRIPTION='PROGRAMMER'/> 
<z:row NAME='ANN SMITH' DESCRIPTION='FRONT DESK'/> 
<z:row NAME='STEVE JOHNSON' DESCRIPTION='TESTER'/> 
</rs:data> 
</xml> 

我不确定如何前往 <rs:data>节点。我最终想通过每个 <z:row> 来枚举并获取属性 NAME和 DESCRPTION . Web 服务将其作为字符串返回给我,因此我将字符串加载到 XMLDocument 中,如下所示:

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

现在,我不确定是否需要使用 XmlNamespaceManager为了调用我xDoc导入 <s:Schema>

由于前缀 rs,我曾尝试使用 XPath 选择单个节点,但没有成功。

XmlNode xNode = xDoc.SelectSingleNode("/rs:data"); 

如果需要任何进一步的信息,请询问。

请您参考如下方法:

如果您将 xml 作为字符串尝试解析它而不是使用 Load()

var xml = XDocument.Parse(xmlstring); 

您必须使用命名空间来正确获取数据。

XNamespace ns = "#RowsetSchema"; 
 
foreach (var element in xml.Descendants().Elements(ns + "row")) 
{ 
    Console.WriteLine ("Name = " + element.Attribute("NAME").Value + ", " + "Description = " + element.Attribute("DESCRIPTION").Value);  
}