powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / помогите разобраться с записью в файл
4 сообщений из 4, страница 1 из 1
помогите разобраться с записью в файл
    #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
помогите разобраться с записью в файл
    #36881229
refreg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
phyx,

Если, я правильно понял проблему, то просто в выходном файле нет корневого элемента. Как вариант (если надо именно через запись в файл) можно добавить искусственный корневой элемент, а потом через xsl преобразовать в требуемый формат. Но лучше бы сразу сформировать в "Node" требуемый формат, и потом его один раз записать.
...
Рейтинг: 0 / 0
помогите разобраться с записью в файл
    #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
помогите разобраться с записью в файл
    #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
4 сообщений из 4, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / помогите разобраться с записью в файл
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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