我正在尝试编写XML文档并对其进行POST,但在使用XmlSerializer(我在Android Studio中工作)时无法获得文档的格式。
我想写的XML:
<?xml version="1.0" encoding="UTF-8"?>
<ser:serviceParameters xmlns:ser="http://www.endinfosys.com/Voyager/serviceParameters">
<ser:parameters>
<ser:parameter key="action">
<ser:value>add</ser:value>
</ser:parameter>
</ser:parameters>
<ser:patronIdentifier lastName="LastName" patronHomeUbId="1@DB" patronId="12345">
<ser:authFactor type="B">150</ser:authFactor>
</ser:patronIdentifier>
<ser:definedParameters xsi:type="pat:bookbagRecordsType" xlns:pat="http://www.endinfosys.com/Voyager/patronPreferences" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<pat:record>
<pat:bibId>54414</pat:bibId>
<pat:databaseCode>LOCAL</pat:databaseCode>
</pat:record>
</ser:definedParameters>
</ser:serviceParameters>
这是我必须生成XML的代码:
private static String writeXml(String surname, String barcode, String thisbibid){
XmlSerializer serializer = Xml.newSerializer();
StringWriter writer = new StringWriter();
try {
serializer.setOutput(writer);
serializer.startDocument("UTF-8", true);
serializer.startTag("ser", "serviceParameters");
serializer.attribute("http://www.endinfosys.com/Voyager/serviceParameters", "xmlns", "ser");
serializer.startTag("ser", "parameters");
serializer.startTag("ser", "parameter");
serializer.attribute("ser", "action", "add");
serializer.endTag("ser", "parameter");
serializer.endTag("ser", "parameters");
serializer.startTag("ser", "patronIdentifier");
serializer.attribute("", "lastName", surname);
serializer.attribute("", "patronHomeUbId", "local");
serializer.attribute("", "patronId", "12345");
serializer.startTag("ser", "authFactor");
serializer.attribute("", "type", "B");
serializer.text("150");
serializer.endTag("ser", "authFactor");
serializer.endTag("ser", "patronIdentifier");
serializer.startTag("ser", "definedParameters");
serializer.attribute("http://www.endinfosys.com/Voyager/patronPreferences", "xmlns", "pat");
serializer.attribute("pat", "bookbagRecordsType", "xsi:type");
serializer.startTag("pat", "record");
serializer.startTag("pat", "bibId");
serializer.text(thisbibid);
serializer.endTag("pat", "bibId");
serializer.startTag("pat", "databaseCode");
serializer.text("LOCAL");
serializer.endTag("pat", "databaseCode");
serializer.endTag("pat", "record");
serializer.endTag("ser", "definedParameters");
serializer.endTag("ser", "serviceParameters");
serializer.endDocument();
return writer.toString();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
但String输出是:
<?xml version='1.0' encoding='UTF-8' standalone='yes' ?><n0:serviceParameters n1:xmlns="ser" xmlns:n0="ser" xmlns:n1="http://www.endinfosys.com/Voyager/serviceParameters"><n0:parameters><n0:parameter n0:action="add" /></n0:parameters><n0:patronIdentifier lastName="LastName" patronHomeUbId="local" patronId="12345"><n0:authFactor type="B">150</n0:authFactor></n0:patronIdentifier><n0:definedParameters n2:xmlns="pat" n3:bookbagRecordsType="xsi:type" xmlns:n2="http://www.endinfosys.com/Voyager/patronPreferences" xmlns:n3="pat"><n3:record><n3:bibId>54414</n3:bibId><n3:databaseCode>LOCAL</n3:databaseCode></n3:record></n0:definedParameters></n0:serviceParameters>
我尝试更改.attribute元素的顺序,但无法正确获取前缀。任何帮助将不胜感激
答案 0 :(得分:0)
哪个包是Xml.newSerializer()??我正在尝试重现您的错误,显然您的代码没问题。它应该返回预期的XML。
答案 1 :(得分:0)
在找到setPrefix方法和大量的试错之后,我得到了XML的格式以匹配所需的格式。
private static String writeXml(String surname, String barcode, String thisbibid){
XmlSerializer serializer = Xml.newSerializer();
StringWriter writer = new StringWriter();
try {
serializer.setOutput(writer);
serializer.startDocument("UTF-8", true);
serializer.setPrefix("ser", "http://www.endinfosys.com/Voyager/serviceParameters");
serializer.startTag("", "ser:serviceParameters");
serializer.startTag("", "ser:parameters");
serializer.startTag("", "ser:parameter");
serializer.attribute("", "key", "action");
serializer.startTag("", "ser:value");
serializer.text("add");
serializer.endTag("", "ser:value");
serializer.endTag("", "ser:parameter");
serializer.endTag("", "ser:parameters");
serializer.startTag("", "ser:patronIdentifier");
serializer.attribute("", "lastName", surname);
serializer.attribute("", "patronHomeUbId", "local");
serializer.attribute("", "patronId", "12345");
serializer.startTag("", "ser:authFactor");
serializer.attribute("", "type", "B");
serializer.text("150");
serializer.endTag("", "ser:authFactor");
serializer.endTag("", "ser:patronIdentifier");
serializer.setPrefix("pat", "http://www.endinfosys.com/Voyager/patronPreferences");
serializer.setPrefix("xsi", "http://www.w3.org/2001/XMLSchema-instance");
serializer.startTag("", "ser:definedParameters");
serializer.attribute("", "xsi:type", "pat:bookbagRecordsType");
serializer.startTag("", "pat:record");
serializer.startTag("", "pat:bibId");
serializer.text(thisbibid);
serializer.endTag("", "pat:bibId");
serializer.startTag("", "pat:databaseCode");
serializer.text("LOCAL");
serializer.endTag("", "pat:databaseCode");
serializer.endTag("", "pat:record");
serializer.endTag("", "ser:definedParameters");
serializer.endTag("", "ser:serviceParameters");
serializer.endDocument();
return writer.toString();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
必须在http://developer.android.com/reference/org/xmlpull/v1/XmlSerializer.html的文档中明确设置前缀,然后在开始/结束标记中设置“硬代码”。
现在将foward转移到下一个绊脚石;)