我使用SP Web服務從GetListItems中下拉數據我希望得到儘可能多的數據,因爲我將該數據存儲到本地XML文檔中我還試圖創建TSV從具有可變屬性的XML元素
數據返回的XML是這樣的:
<rs:data ItemCount="896" xmlns:rs="urn:schemas-microsoft-com:rowset">
<z:row ows_A="1" ows_B="2" xmlns:z="#RowsetSchema" />
有實際上更接近60 +每行的屬性,這個問題是每個「行」返回的屬性不一致(如有的有60,有的有67,有的有59等)
如果我icitly要求按名稱的屬性,它不是一個大問題:
foreach (System.Xml.XmlNode listItem in nodeListItems)
{
if (listItem.Name == "rs:data")
{
for (int i = 0; i < listItem.ChildNodes.Count; i++)
{
if (listItem.ChildNodes[i].Name == "z:row")
{
wtSr.Append(listItem.ChildNodes[i].Attributes["ows_Title"].Value);
wtSr.Append("\t");
等,等
我試圖使用像
for (int k = 0; k < listItem.ChildNodes[i].Attributes.Count; k++)
{
tmpWtCol = listItem.ChildNodes[i].Attributes[k].Name.ToString().Replace("ows_", string.Empty).Replace("_", string.Empty);
wtSr.Append(tmpWtCol + "\t");
wtDidHeaders = true;
}
收穫的人可能經過的所有屬性解析屬性,但我意識到它只會選取第一行,可能有或沒有最大屬性。我想過分析整個事情。雖然這不太可能,但我也沒有真正的方法知道「最大計數」行是否包含所有組合。
是否有一個更優雅的解決方案與「空白」(缺少)屬性和確定所有屬性創建一個可接受的「列列表」?
+1用於向原始的海報的程序的輸入的XML模式轉向了談話。 – azheglov 2011-02-24 18:06:28
您在這裏可能做出三個假設:1 - 提交者不瞭解XML模式的目的或存在。2 - 如果他們知道,他們還沒有遇到阻止/阻止他們將代碼綁定到模式版本的情況。 3 - 基於模式序列化XML會很有效。如果提交者使用100Mb的XML,他想要做的最後一件事是序列化它。 – 2011-02-24 19:07:20
我沒有提到XML模式,我的意思是列表模式。提交者的價值數據很可能是存儲在SharePoint列表中的用戶生成的數據。瞭解這些列的內部名稱將有助於提交者知道從XML中提取哪些數據。 – 2011-02-24 19:35:37