Поля XML Jpoint2 Sharepoint

1

Имея некоторые проблемы с возвратом определенных полей из запроса SOAP списка SharePoint.

Вот XML:

<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:soap1="http://schemas.microsoft.com/sharepoint/soap/">
   <soap:Header/>
   <soap:Body>
      <soap1:UpdateListItems>
         <soap1:listName>69A3FFFA-782B-45D5-B776-2BE6D5645745</soap1:listName>
         <soap1:updates>
            <Batch OnError="Continue">
            <Method ID="1" Cmd="New">
                <Field Name="Title">New Item</Field>
            </Method>
            </Batch>
         </soap1:updates>
      </soap1:UpdateListItems>
   </soap:Body>
</soap:Envelope>

Я могу использовать следующий код Jdom2, чтобы захватить определенные значения, например:

            // set your name spaces.
            Namespace soap = Namespace.getNamespace("soap","http://www.w3.org/2003/05/soap-envelope");
            Namespace soap1 = Namespace.getNamespace("soap1","http://schemas.microsoft.com/sharepoint/soap/");

            // drill down into elements
            Element rootNode = doc.getRootElement();

            // Get Body node
            Element body = rootNode.getChild("Body",soap);
            // Get UpdateListItem Element
            Element UpdateListItems = body.getChild("UpdateListItems",soap1);
            // Get updates node
            Element updates = UpdateListItems.getChild("updates",soap1);

            // Set list name as String variable
            String listNameString = UpdateListItems.getChild("listName",soap1).getText();

            // Print list text value ** THIS WORKS**
            System.out.println(listNameString);

Однако я не могу понять, как выбрать элементы поля. Например: Как выбрать поле "Название"?

<Field Name="Title">New Item</Field>

ОБНОВИТЬ:

Я также могу получить атрибут "Имя" из элемента "Поле", но может только возвращать или устанавливать имя значения атрибута. Мне нужно иметь доступ к тесту в элементе "Поле".

Я могу получить значение атрибута следующим образом: System.out.println(field.getAttribute("Name").getValue());//Prints Title System.out.println(field.getAttribute("Name").getValue());//Prints Title

И я могу получить это имя: System.out.println(field.getAttribute("Name").getName());//Prints Name System.out.println(field.getAttribute("Name").getName());//Prints Name

Но мне нужно вернуть текстовое значение элемента.

ОБНОВЛЕНИЕ 2: Я не упоминал. XML действительно выглядит так:

'    <?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:soap1="http://schemas.microsoft.com/sharepoint/soap/">
   <soap:Header/>
   <soap:Body>
      <soap1:UpdateListItems>
         <soap1:listName>69A3FFFA-782B-45D5-B776-2BE6D5645745</soap1:listName>
         <soap1:updates>
            <Batch OnError="Continue">
            <Method ID="1" Cmd="New">
                <Field Name="Title">New Item</Field>
                <Field Name="Classification" Type="Choice">Funny</Field>
                <Field Name="Title">New Item</Field>
                <Field Name="Title" Type="Text">Funny List Item</Field>
            </Method>
            </Batch>
         </soap1:updates>
      </soap1:UpdateListItems>
   </soap:Body>
</soap:Envelope>'

Я могу отправить это через SoapUI в SharePoint, и он работает. Но если есть несколько элементов "Поле", с разными атрибутами, как я могу выбрать правильный через Jdom2?

Я могу это сделать: String title= field.getText();//returns New Item String title= field.getText();//returns New Item

Но как я мог бы захватить текст из других элементов "Поле", которые используют атрибут "Имя"?

  • 0
    Кронштейны? Какие брекеты?
  • 0
    Мне нужно иметь возможность вернуть текстовое значение элемента. (Новый элемент) <Field Name="Title">New Item</Field>
Теги:
soap
sharepoint
jdom-2

2 ответа

0
Лучший ответ

Спасибо за помощь rolfl. Я понял. Вы можете прокручивать элементы Child для доступа к различным атрибутам "Field". Затем я проверяю имя атрибута, чтобы получить или установить его содержимое. Это лучшее, что я мог придумать.

    for (Element node : method.getChildren("Field")){ 
        if(node.getAttributeValue("Name").equalsIgnoreCase("Title")){
            node.setText("String");
        }
        System.out.println(node.getAttribute("Name").getValue());
    }
1

Это все в пространствах имен. У вас их три, soap, soap1, а также пространство имен по умолчанию, которое в данном случае является "". JDOM обозначает это пространство имен как Namespace.NO_NAMESPACE.

Таким образом, чтобы получить элемент поля от updates Element, вы можете сделать:

Element methods = updates.getChild("Method", Namespace.NO_NAMESPACE);
Element field = methods.getChild("Field", Namespace.NO_NAMESPACE);

Их можно упростить, если вы хотите, используя метод getChild, который вообще не имеет параметра пространства имен, например:

Element methods = updates.getChild("Method");
Element field = methods.getChild("Field");

Важно видеть, что ваш документ имеет 3 пространства имен и что элемент Field (и метод тоже) не находится в пространстве имен soap или soap1.

  • 0
    Правильно, но я пытаюсь получить значение в элементе поля для атрибута имени для заголовка. Прямо перед тем, как прочитать ваш ответ, я смог повторить ваш ответ. Элемент field = method.getChild ("Field"); Однако мне нужно иметь доступ к элементу Field для атрибута Title. До сих пор я мог получить атрибут «Заголовок» с помощью: Атрибут title = field.getAttribute («Заголовок»); но не могу получить его текстовое значение.
  • 0
    Я предполагаю, что я плотный .... Я не могу понять, хотите ли вы значение атрибута или текстовое значение. Для любого из них, если у вас есть field , вы можете получить либо атрибут, либо значение ... Но это не имеет смысла: "... пытаться получить значение в элементе поля для атрибута Name для заголовка". ... это не складывается.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню