[英]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_LinkTitle
是z: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.