C# 从xml中读取属性

C# 从xml中读取属性,c#,asp.net,xml,xml-attribute,C#,Asp.net,Xml,Xml Attribute,有人能帮我用c从这个xml结构中读取属性ows_AZPersonnummer和asp.net吗 <listitems 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" xm

有人能帮我用c从这个xml结构中读取属性ows_AZPersonnummer和asp.net吗

<listitems 
  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"
  xmlns="http://schemas.microsoft.com/sharepoint/soap/">
<rs:data ItemCount="1">
   <z:row 
      ows_AZNamnUppdragsansvarig="Peter" 
      ows_AZTypAvUtbetalning="Arvode till privatperson" 
      ows_AZPersonnummer="196202081276"
      ows_AZPlusgiro="5456436534"
      ows_MetaInfo="1;#"
      ows__ModerationStatus="0"
      ows__Level="1" ows_ID="1"
      ows_owshiddenversion="6"
      ows_UniqueId="1;#{11E4AD4C-7931-46D8-80BB-7E482C605990}"
      ows_FSObjType="1;#0"
      ows_Created="2009-04-15T08:29:32Z"
      ows_FileRef="1;#uppdragsavtal/Lists/Uppdragsavtal/1_.000" 
    />
</rs:data>
</listitems>


并获得值196202081276。

我想说您需要一个XML解析器,我认为这是常见的。这看起来像一个简单的XML结构,因此处理代码应该不会太难。

XmlDocument
对象中打开它,然后使用
SelectNode
函数和以下XPath:

//*[local-name() = 'row']/@ows_AZPersonnummer
基本上,它会查找每个名为“row”的元素,而不管深度和名称空间如何,并返回它的
ows_azpersonnumer
属性。应该有助于避免您可能遇到的任何名称空间问题。

使用,但您需要加载具有数据源的xml

否则,您可以使用XmlTextReader加载它。这是一个。

这是你的朋友:

string xml = "..."; //your xml here
XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);

XmlNamespaceManager nsm = new XmlNamespaceManager(new NameTable());
nsm.AddNamespace("z", "#RowsetSchema");

XmlNode n = doc.DocumentElement
               .SelectSingleNode("//@ows_AZPersonnummer", nsm);
Console.WriteLine(n.Value);
您还可以使用LINQ转换为XML:

XDocument xd = XDocument.Parse(xml);
XNamespace xns = "#RowsetSchema";
string result1 = xd.Descendants(xns + "row")
            .First()
            .Attribute("ows_AZPersonnummer")
            .Value;
// Or...

string result2 =
    (from el in xd.Descendants(xns + "row")
     select el).First().Attribute("ows_AZPersonnummer").Value;

需要更多的细节。什么XML结构?它就在那里,只需要缩进,这样markdown就可以看到它。为您格式化XML,使其适合页面宽度。您能给我们看一段代码片段,说明您是如何尝试获取属性值的吗?这将有助于引导您走上正确的道路。我正要发布LINQ版本[result1版本],但您的速度更快!唯一的区别是我在结尾使用了.FirstOrDefault()而没有使用.ToString()(因为.Value是一个字符串)。结果2的版本不太正确。Richard…很好地发现和欣赏,不过我将把First()和FirstOrDefault()留给OP来决定。:)