Voici le code que j'utiliser pour trouver le texte intérieur d'un certain nœud dans un document DOM d'un élément de la liste de Sharepoint:Pourquoi cette expression XPath ne trouve-t-elle pas le noeud que je veux avec .SelectSingleNode()?
'parse XML of a list item to get the field value
Private Function getFieldValueFromXml(xml As Variant, fieldName As Variant) As Variant
Dim node As IXMLDOMNode
Dim namespaceAndName As String
'set namespace string for XPath search, using field name
namespaceAndName = "/d:" & fieldName
Set domDoc = New DOMDocument60
'load DOM document with XML
domDoc.LoadXML xml
'set selection namespace for XPath search
domDoc.SetProperty "SelectionNamespaces", "xmlns:d='http://schemas.microsoft.com/ado/2007/08/dataservices'"
'get first node with this namespace (a list item should have only one node with a given field name)
Set node = domDoc.SelectSingleNode(namespaceAndName)
getFieldValueFromXml = node.text
End Function
Cela fonctionne bien lorsque je récupère l'élément de liste par numéro d'identification, mais quand je obtenir l'aide $filter
comme ceci:
https://sps.utility.xyz.com/Sites/ABC/_api/web/lists/GetByTitle('Stations')/items?$filter=Title eq '020'
puis lorsque je tente de trouver une valeur en appelant getFieldValueFromXml(result,"Id")
il ne trouve pas le nœud. Voici le code XML retourné par l'appel REST ci-dessus:
<?xml version="1.0"?>
<feed xml:base="https://sps.utility.abc.com/Sites/asdaC/_api/" xmlns="http://www.w3.org/2005/Atom" xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns:georss="http://www.georss.org/georss" xmlns:gml="http://www.opengis.net/gml">
<id>5a608d14-721b-4076-9ed0-91eccd9b70ec</id>
<title/>
<updated>2017-10-04T22:24:47Z</updated>
<entry m:etag=""42"">
<id>Web/Lists(guid'f9565c6c-334c-4953-a117-5dd9b0cd38a5')/Items(415)</id>
<category term="SP.Data.StationsListItem" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme"/>
<title/>
<updated>2017-10-04T22:24:47Z</updated>
<author>
<name/>
</author>
<content type="application/xml">
<m:properties>
<d:FileSystemObjectType m:type="Edm.Int32">0</d:FileSystemObjectType>
<d:Id m:type="Edm.Int32">415</d:Id>
<d:ReferenceImages m:type="SP.FieldUrlValue">
<d:Description>some number 131553</d:Description>
<d:Url>http://google.com</d:Url>
</d:ReferenceImages>
<d:CDScope m:type="Edm.Boolean">true</d:CDScope>
<d:ID m:typ
e="Edm.Int32">415</d:ID>
<d:Modified m:type="Edm.DateTime">2017-10-04T20:15:54Z</d:Modified>
<d:Created m:type="Edm.DateTime">2016-03-27T19:21:49Z</d:Created>
<d:AuthorId m:type="Edm.Int32">50</d:AuthorId>
<d:EditorId m:type="Edm.Int32">330</d:EditorId>
<d:OData__UIVersionString>18.0</d:OData__UIVersionString>
<d:Attachments m:type="Edm.Boolean">false</d:Attachments>
<d:GUID m:type="Edm.Guid">f31fcf07-0d81-442e-8621-56d09a8507f6</d:GUID>
</m:properties>
</content>
</entry>
</feed>
En getFieldValueFromXml()
, la valeur .SelectSingleNode(namespaceAndName) call returns Nothing. How should I modify my code to pick up the
Id`?
On dirait que vous êtes juste la recherche de la racine. Essayez de rechercher les personnes décédées avec quelque chose comme '.SelectSingleNode (" .// d: Id ")' – Barns
@ barns52, Cela a fonctionné, merci! Je vais accepter cette réponse si vous l'affichez. – sigil