depuis plus d'une semaine et je n'arrive toujours pas à comprendre quel est le problème ici. J'espère que tu pourrais m'aider. Je récupère xml du serveur de point de partage en utilisant le service Web SOAP, puis je convertis l'objet xml en dataset, j'obtiens le dataset avec succès mais il est "endommagé" - il y a quelques colonnes qui ont des valeurs manquantes du xml. ici est le code pour importer le fichier XML en utilisant SOAP:convertir xml de la liste sharepoint à l'ensemble de données
private void button2_Click(object sender, EventArgs e)
{
oportal.Lists list = new oportal.Lists();
list.Credentials = System.Net.CredentialCache.DefaultCredentials;
list.Url = "http://xxx/xxx/xxx/xxx/_vti_bin/Lists.asmx";
XmlDocument xmlDoc = new System.Xml.XmlDocument();
XmlNode ndQUery = xmlDoc.CreateNode(XmlNodeType.Element, "Query", "");
XmlNode ndViewFields = xmlDoc.CreateNode(XmlNodeType.Element, "ViewFields", "");
XmlNode ndQueryOptions = xmlDoc.CreateNode(XmlNodeType.Element, "QueryOptions", "");
ndQueryOptions.InnerXml =
"<IncludeMandatoryColumns>TRUE</IncludeMandatoryColumns>" +
"<DateInUtc>FALSE</DateInUtc>";
ndViewFields.InnerXml = @"<FieldRef Name='שם לקוח' />
<FieldRef Name='שם מתל'/>";
try
{
XmlNode ndListItems = list.GetListItems("{DD1CF626-62E1-4E36-BF2B-C7D08EA73674}",null, ndQUery, ndViewFields, "14000", ndQueryOptions, null);
System.Diagnostics.Debug.WriteLine(ndListItems.OuterXml);
dataGridView1.DataSource = ConverttYourXmlNodeToDataSet(ndListItems).Tables[1];
}
catch(System.Web.Services.Protocols.SoapException ex) {
MessageBox.Show(ex.Message + Environment.NewLine + ex.Detail.InnerText + Environment.NewLine + ex.StackTrace);
}
}
le xml Je reçois regarde les noms ok, la colonne (champ) sont en langue hébreue mais le xml les affiche dans Entité HTML (Hexadécimal) - peut-être que c'est la racine du problème?
après que je reçois le xml je suis le convertir en jeu de données avec ConverttYourXmlNodeToDataSet() fonction est ici le code:
public static DataSet ConverttYourXmlNodeToDataSet(XmlNode xmlnodeinput)
{
DataSet dataset = null;
if (xmlnodeinput != null)
{
XmlTextReader xtr = new XmlTextReader(xmlnodeinput.OuterXml, XmlNodeType.Element,null);
dataset = new DataSet();
dataset.ReadXml(xtr);
}
return dataset;
}
Je reçois le jeu de données succefuly mais comme je l'ai mentionné son endommagé à cause des valeurs manquantes , ils existent dans le xml mais pas dans le dataset (les colonnes existent mais pas les valeurs).
s'il vous plaît jeter un oeil à ce tournage écran:
iv`e entouré par la couleur rouge l'une des colonnes qui n'obtiennent leur valeur du XML. ici est une séance d'écran du xml et la valeur manquante qui devrait être dans l'ensemble de données surronded avec la couleur rouge:
également tryed pour convertir le xml à l'ensemble de données comme ça, mais les résultats sont les mêmes :
public static DataSet read(XmlNode x) {
DataSet ds = new DataSet();
XmlReader r = new XmlNodeReader(x);
ds.ReadXml(r);
return ds;
}
J'espère quelqu'un peut m'aider ici. tnx.
MISE À JOUR:
ok je ne l'ai pas encore résolu mais j'ai découvert quelques petites choses qui peuvent conduire à la solution:
j'ai remarqué que toutes les colonnes qui apparaissent sans valeurs l'ensemble de données sont les colonnes remplies par l'utilisateur dans les contrôles du site Web, et devinez quoi? toutes les légendes pour ces colonnes sont en hébreu, par conséquent les colonnes qui apparaissent avec des valeurs sur l'ensemble de données sont des colonnes par défaut sharepint, et leurs légendes sont en anglais, et ils n'ont pas l'entité HTML (hexadécimal)! nom (regardez le xml). Cela me fait donc soupçonner que le problème est lié aux noms de colonnes de l'Entité HTML (Hexadécimale) qui se rapportent aux légendes hébraïques ... mon hypothèse est que l'ensemble de données ne peut pas interpréter cet encodage Entité HTML (Hexadécimal). un autre indice est que le nom de la colonne comme orthographié dans l'ensemble de données (par exemple regarder la capture d'écran de datagridview ci-dessus - colonne 4 du côté gauche (index 3)) n'est pas interprété correctement, le nom de la colonne doit être 'שם מתל 'et c'est tout - comme vous pouvez le voir (vous n'avez pas à comprendre l'hébreu pour cela) seulement la moitié de cette chaîne hébraïque est là et concaténée à une partie de l'entité HTML codée (hexadécimal).
i ont remarqué que lorsque les colonnes de tri im dans le site Web du point de partage l'URL demandée en utilisant l'entité html hexadécimale de la colonne et non le nom Hébraïque de la colonne:
http://xxx/xxx/xxx/xxx/Lists/1/view9.aspx?View= {c2538b95-efae- 453b-b536-aad6f98265ed} & SortField = _x05e9__x05dd__x0020__x05de__x05 & SortDir = Desc
et je devrait voir quelque chose comme:
http://xxx/xxx/xxx/xxx/Lists/1/view9.aspx?View= {c2538b95-efae-453b-b536-aad6f98265ed} & SortField = _ 'שם מתל' = Desc
donc je fait un changement dans mon code afin de déclarer explicitement les noms de colonnes dans l'entité HTML encodée (Hexadécimal) et je l'ai fait (le code d'origine est au-dessus):
ndViewFields.InnerXml = @"<FieldRef Name='_x05d0__x05d9__x05e9__x05d5__x05' />
<FieldRef Name='_x05e9__x05dd__x0020__x05de__x05'/>";
maintenant le résultat que je recevais l'ensemble de données a changé! le changement était que les colonnes i les déclaraient explicitement déplacées vers les index de la première colonne de l'ensemble de données mais il n'y a toujours aucune valeur dans ces colonnes.
donc, à tous estivaux que creuser, voici mes hypothèses:
*. le problème est l'interpréteur entre le xml et l'ensemble de données
*. l'interpréteur est défectueux parce qu'il ne peut pas interpréter correctement l'entité HTML écodée (Hexadécimal)
*. les légendes des colonnes écrites en Entité HTML (Hexadécimale) parce que leurs légendes sont en hébreu
*. solution peut être ou faire des légendes de colonnes en hébreu pur (en XML) ou faire quelque chose qui va faire fonctionner correctement l'interpréteur entre xml et dataset (peut-être en utilisant XmlParserContext class - essayé un peu sans succès ou autre classe qui peut manipuler xml encodé texte).