繁体   English   中英

如何使用C#代码读取列表中的特定元素

[英]how to read a particular xelement in the list using c# code

我有以下xelement集合,我希望通过ows_LinkTitle进行过滤,并使用c#代码检索特定的xelement。

<listitems xmlns:s="uuid:FDC6E3F0-6GH3-11d1-A2A3-00BB00C14882" xmlns:dt="uuid:D2F41010-65C3"
  xmlns:rs="urn:schemas-microsoft-com:rowset" xmlns:z="#RowsetSchema"        
  xmlns="http://schemas.microsoft.com/sharepoint/soap/">
   <rs:data ItemCount="71">
     <z:row ows_Attachments="0" ows_LinkTitle="DocumentUrl1" />
     <z:row ows_Attachments="0" ows_LinkTitle="DocumentUrl2" />
     <z:row ows_Attachments="0" ows_LinkTitle="DocumentUrl3" />
    </rs:data>
 </listitems>

我尝试了下面的代码,但它给了我错误:

 The ':' character, hexadecimal value 0x3A, cannot be included in a name.

XElement updateItem = (from xml2 in listItems.Descendants("rs:data")
                            where xml2.Element("ows_LinkTitle").Value == strListItemName
                            select xml2).FirstOrDefault();

您需要通过名称空间引用元素,例如使用XNamespace

XNanespace rs = "urn:schemas-microsoft-com:rowset";
listItems.Descendants(rs + "data")
.. same for other elements with namespaces

另外,请注意, ows_LinkTitlez:row的属性,而不是元素。

您需要注意正在使用的XML名称空间,而不能仅在XPath表达式中使用名称空间前缀! 您需要为它们明确定义XNamespace实体,并在XPath表达式中使用这些XML名称空间。

尝试这样的事情:

string inputXml = @"<listitems xmlns:s='uuid:FDC6E3F0-6GH3-11d1-A2A3-00BB00C14882' 
                                           xmlns:dt='uuid:D2F41010-65C3'
                                           xmlns:rs='urn:schemas-microsoft-com:rowset' xmlns:z='#RowsetSchema'        
                                           xmlns='http://schemas.microsoft.com/sharepoint/soap/'>
                                <rs:data ItemCount='71'>
                                    <z:row ows_Attachments='0' ows_LinkTitle='DocumentUrl1' />
                                    <z:row ows_Attachments='0' ows_LinkTitle='DocumentUrl2' />
                                    <z:row ows_Attachments='0' ows_LinkTitle='DocumentUrl3' />
                                </rs:data>
                                </listitems>";

// get the XDocument    
XDocument xdoc = XDocument.Parse(inputXml);

// define the relevant XML namespaces to be used 
XNamespace rs = "urn:schemas-microsoft-com:rowset";
XNamespace z = "#RowsetSchema";


// get the list of <rs:data>/<z:row> elements
var dataItems = xdoc.Descendants(rs + "data").Elements(z + "row");

// get the one entry you need - you need to compare the value
// of the "ows_LinkTitle" *attribute* (not element) to your search term
var item = dataItems.FirstOrDefault(d => d.Attribute("ows_LinkTitle").Value == strListItemName);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM