从SharePoint列表SOAP请求返回某些字段时遇到一些问题。
这是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元素。 例如:我如何选择“标题”字段?
<Field Name="Title">New Item</Field>
更新:
我还可以从“Field”元素中获取属性“Name”,但只能返回或设置属性值的名称。我需要能够在“Field”元素中访问测试。
我可以像这样得到属性的值:
System.out.println(field.getAttribute("Name").getValue()); // Prints Title
我可以得到这样的名字:
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,它可以正常运行。但是如果有多个具有不同属性的“Field”元素,我如何通过Jdom2选择正确的元素?
我可以这样做:
String title = field.getText(); //returns New Item
但是,如何从其他使用“Name”属性的“Field”元素中获取文本?
答案 0 :(得分:1)
全部在名称空间中。您有三个soap
,soap1
,还有默认命名空间,在这种情况下,它是&#34;&#34;。 JDOM将此命名空间指定为Namespace.NO_NAMESPACE。
因此,要从updates
元素获取字段元素,您可以执行以下操作:
Element methods = updates.getChild("Method", Namespace.NO_NAMESPACE);
Element field = methods.getChild("Field", Namespace.NO_NAMESPACE);
如果需要,可以通过使用根本没有namespace参数的getChild方法使这些更简单,例如:
Element methods = updates.getChild("Method");
Element field = methods.getChild("Field");
这里要看的重要一点是,您的文档有3个名称空间,而Field元素(以及Method也不在soap或soap1名称空间中)。
答案 1 :(得分: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());
}