Гость
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / помогите разобраться с записью в файл / 4 сообщений из 4, страница 1 из 1
04.10.2010, 15:58
    #36880602
phyx
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите разобраться с записью в файл
сразу предупрежу, с xml-ем я не сильно хорошо знаком

изначально задача состояла в том, чтобы выудить списки ШП в таблицы sql
списки большие и приходится к ним обращаться по-странично
в xml файл за одну итерацию пишется одна страница

через

Код: plaintext
1.
Dim writer As IO.StreamWriter = New IO.StreamWriter("c:\_list.xml", False)
writer.Write(Node.OuterXml)

получается, что вписывая каждую страницу райтер пишет "обертку" xml-я целиком, и парсер, который потом этот xml разбирает ругается

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
<listitems xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:rs="urn:schemas-microsoft-com:rowset" xmlns:z="#RowsetSchema" xmlns="http://schemas.microsoft.com/sharepoint/soap/">
<rs:data ....>
<z:row ..... />
<z:row ..... />
.......
</rs:data>
</listitems>
<listitems xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:rs="urn:schemas-microsoft-com:rowset" xmlns:z="#RowsetSchema" xmlns="http://schemas.microsoft.com/sharepoint/soap/">
<rs:data ....>
<z:row ..... />
<z:row ..... />
.......
</rs:data>
</listitems>
.......

как сделать так, чтобы райтер писал всё в одну "оболочку" <listitems></listitems>?

спасибо!
...
Рейтинг: 0 / 0
04.10.2010, 20:47
    #36881229
refreg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите разобраться с записью в файл
phyx,

Если, я правильно понял проблему, то просто в выходном файле нет корневого элемента. Как вариант (если надо именно через запись в файл) можно добавить искусственный корневой элемент, а потом через xsl преобразовать в требуемый формат. Но лучше бы сразу сформировать в "Node" требуемый формат, и потом его один раз записать.
...
Рейтинг: 0 / 0
05.10.2010, 09:40
    #36881582
phyx
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите разобраться с записью в файл
refreg,

получается да, либо нет корневого и его надо придумать и добавить, либо их два и надо писать все в один

в первом случае я немного не понимаю как "открыть" node пока я пишу во внутрь и закрыть его потом
во втором - как писать в один если я со сменой страницы постоянно заполняю этот node

ниже скрипт целиком, возможно станет яснее и может поможет как-то тому кто пытается получить списки

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
Public Class ScriptMain
    Public Sub Main()
        Dim SPProxy As New WebApplication1.sharepoint_proxy.Lists()
        SPProxy.Credentials = System.Net.CredentialCache.DefaultCredentials

        SPProxy.Url = "http://...../_vti_bin/lists.asmx"

        Dim xPositionNext As Xml.XmlNode
        Dim camlDoc As New Xml.XmlDocument
        Dim Node As Xml.XmlNode = SPProxy.GetListItems("815CC3CC-2C2E-465B-BDF3-B60516E56FEE", Nothing, Nothing, Nothing, "10000", Nothing, Nothing)
        Dim writer As IO.StreamWriter = New IO.StreamWriter("c:\_list.xml", False)

        writer.Write(Node.OuterXml)

        Dim ndQueryOptions As Xml.XmlNode = camlDoc.CreateNode(Xml.XmlNodeType.Element, "QueryOptions", "")

        Do
            xPositionNext = Node.SelectSingleNode("//@ListItemCollectionPositionNext")
            If xPositionNext Is Nothing Then
                Exit Do
            Else
                ndQueryOptions.InnerXml = "<Paging ListItemCollectionPositionNext='" + xPositionNext.InnerXml + "' />"
            End If
            Node.RemoveAll()
            Node = SPProxy.GetListItems("815CC3CC-2C2E-465B-BDF3-B60516E56FEE", Nothing, Nothing, Nothing, "10000", ndQueryOptions, Nothing)
            writer.Write(Node.OuterXml)
        Loop
        writer.Close()
        Dts.TaskResult = Dts.Results.Success
    End Sub




End Class

...
Рейтинг: 0 / 0
05.10.2010, 13:31
    #36882300
refreg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите разобраться с записью в файл
phyx,
Первый вариант - немного корявый, но как то так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Dim writer As IO.StreamWriter = New IO.StreamWriter("c:\_list.xml", False)
writer.Write("<root>")
.....
do-loop
.....
writer.Write("</root>")
writer.Close()

Второй способ предполагает использовать методы типа "appendChild"...
...
Рейтинг: 0 / 0
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / помогите разобраться с записью в файл / 4 сообщений из 4, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]