下面列出了android.util.Xml.Encoding#org.xmlpull.v1.XmlSerializer 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
/**
* Flatten a Map into an XmlSerializer. The map can later be read back
* with readThisMapXml().
*
* @param val The map to be flattened.
* @param name Name attribute to include with this list's tag, or null for
* none.
* @param out XmlSerializer to write the map into.
*
* @see #writeMapXml(Map, OutputStream)
* @see #writeListXml
* @see #writeValueXml
* @see #readMapXml
*/
public static final void writeMapXml(Map val, String name, XmlSerializer out)
throws XmlPullParserException, java.io.IOException
{
if (val == null) {
out.startTag(null, "null");
out.endTag(null, "null");
return;
}
Set s = val.entrySet();
Iterator i = s.iterator();
out.startTag(null, "map");
if (name != null) {
out.attribute(null, "name", name);
}
while (i.hasNext()) {
Map.Entry e = (Map.Entry)i.next();
writeValueXml(e.getValue(), (String)e.getKey(), out);
}
out.endTag(null, "map");
}
public synchronized boolean dumpGlobalSelector(final XulHttpServer.XulHttpServerRequest request, final XulHttpServer.XulHttpServerResponse response) {
XmlSerializer xmlWriter = obtainXmlSerializer(response.getBodyStream());
if (xmlWriter == null) {
return false;
}
try {
xmlWriter.startDocument("utf-8", Boolean.TRUE);
XmlContentDumper contentDumper = initContentDumper(request.queries, xmlWriter);
contentDumper.setNoSelectors(false);
contentDumper.dumpSelectors(XulManager.getSelectors());
xmlWriter.endDocument();
xmlWriter.flush();
return true;
} catch (IOException e) {
XulLog.e(TAG, e);
}
return false;
}
private static void parsePlurals(XmlSerializer serializer, ResPlurals plurals)
throws IOException {
serializer.startTag(ns, ResType.PLURALS.toString());
serializer.attribute(ns, ID, ResType.resolveID(plurals.getId()));
for (ResPlurals.Item item : plurals.expand()) {
serializer.startTag(ns, ResType.ITEM.toString());
serializer.attribute(ns, QUANTITY, item.getQuantity());
if (item.wasModified() != DEFAULT_MODIFIED)
serializer.attribute(ns, MODIFIED, Boolean.toString(item.wasModified()));
serializer.text(ResTag.sanitizeContent(item.getContent()));
serializer.endTag(ns, ResType.ITEM.toString());
}
serializer.endTag(ns, ResType.PLURALS.toString());
}
@Override
public void writeToDeviceReport(XmlSerializer serializer) throws IOException {
this.serializer = serializer;
serializer.startTag(DeviceReportWriter.XMLNS, "force_close_subreport");
try {
if (singleEntry != null) {
serializeLog(singleEntry.getID(), singleEntry);
} else {
for (ForceCloseLogEntry entry : logStorage) {
serializeLog(entry.getID(), entry);
}
}
} finally {
serializer.endTag(DeviceReportWriter.XMLNS, "force_close_subreport");
}
}
/**
* Flatten a String[] into an XmlSerializer. The list can later be read back
* with readThisStringArrayXml().
*
* @param val The String array to be flattened.
* @param name Name attribute to include with this array's tag, or null for
* none.
* @param out XmlSerializer to write the array into.
*
* @see #writeMapXml
* @see #writeValueXml
* @see #readThisIntArrayXml
*/
public static final void writeStringArrayXml(String[] val, String name, XmlSerializer out)
throws XmlPullParserException, java.io.IOException {
if (val == null) {
out.startTag(null, "null");
out.endTag(null, "null");
return;
}
out.startTag(null, "string-array");
if (name != null) {
out.attribute(null, "name", name);
}
final int N = val.length;
out.attribute(null, "num", Integer.toString(N));
for (int i=0; i<N; i++) {
out.startTag(null, "item");
out.attribute(null, "value", val[i]);
out.endTag(null, "item");
}
out.endTag(null, "string-array");
}
public XmlSerializer startTag(String namespace, String name) throws IOException,
IllegalArgumentException, IllegalStateException {
if (mInTag) {
append(">\n");
}
if (mIndent) {
appendIndent(mNesting);
}
mNesting++;
append('<');
if (namespace != null) {
append(namespace);
append(':');
}
append(name);
mInTag = true;
mLineStart = false;
return this;
}
public static void writeRestrictions(@NonNull XmlSerializer serializer,
@Nullable Bundle restrictions, @NonNull String tag) throws IOException {
if (restrictions == null) {
return;
}
serializer.startTag(null, tag);
for (String key : restrictions.keySet()) {
if (NON_PERSIST_USER_RESTRICTIONS.contains(key)) {
continue; // Don't persist.
}
if (USER_RESTRICTIONS.contains(key)) {
if (restrictions.getBoolean(key)) {
serializer.attribute(null, key, "true");
}
continue;
}
Log.w(TAG, "Unknown user restriction detected: " + key);
}
serializer.endTag(null, tag);
}
@Override
public void serializeToResValuesXml(XmlSerializer serializer,
ResResource res) throws IOException, AndrolibException {
String type = res.getResSpec().getType().getName();
if ("style".equals(type)) {
new ResStyleValue(mParent, new Duo[0], null)
.serializeToResValuesXml(serializer, res);
return;
}
if ("array".equals(type)) {
new ResArrayValue(mParent, new Duo[0]).serializeToResValuesXml(
serializer, res);
return;
}
if ("plurals".equals(type)) {
new ResPluralsValue(mParent, new Duo[0]).serializeToResValuesXml(
serializer, res);
return;
}
serializer.startTag(null, "item");
serializer.attribute(null, "type", type);
serializer.attribute(null, "name", res.getResSpec().getName());
serializer.endTag(null, "item");
}
/** The purpose of this test is to map an XML with an Array of {@link String} objects. */
@Test
public void testParseArrayTypeString() throws Exception {
ArrayTypeStringGeneric xml = new ArrayTypeStringGeneric();
XmlPullParser parser = Xml.createParser();
parser.setInput(new StringReader(MULTIPLE_STRING_ELEMENT));
XmlNamespaceDictionary namespaceDictionary = new XmlNamespaceDictionary();
Xml.parseElement(parser, xml, namespaceDictionary, null);
// check type
assertEquals(2, xml.rep.length);
assertEquals("rep1", xml.rep[0]);
assertEquals("rep2", xml.rep[1]);
// serialize
XmlSerializer serializer = Xml.createSerializer();
ByteArrayOutputStream out = new ByteArrayOutputStream();
serializer.setOutput(out, "UTF-8");
namespaceDictionary.serialize(serializer, "any", xml);
assertEquals(MULTIPLE_STRING_ELEMENT, out.toString());
}
@Override
public XmlSerializer startTag(String namespace, String name) throws IOException,
IllegalArgumentException, IllegalStateException {
if (mInTag) {
append(">\n");
}
if (mIndent) {
appendIndent(mNesting);
}
mNesting++;
append('<');
if (namespace != null) {
append(namespace);
append(':');
}
append(name);
mInTag = true;
mLineStart = false;
return this;
}
private void filterExport(XmlSerializer serializer) throws IOException {
try (Cursor cursor = DatabaseHelper.getInstance(this).getAccess()) {
int colUid = cursor.getColumnIndex("uid");
int colVersion = cursor.getColumnIndex("version");
int colProtocol = cursor.getColumnIndex("protocol");
int colDAddr = cursor.getColumnIndex("daddr");
int colDPort = cursor.getColumnIndex("dport");
int colTime = cursor.getColumnIndex("time");
int colBlock = cursor.getColumnIndex("block");
while (cursor.moveToNext())
for (String pkg : getPackages(cursor.getInt(colUid))) {
serializer.startTag(null, "rule");
serializer.attribute(null, "pkg", pkg);
serializer.attribute(null, "version", Integer.toString(cursor.getInt(colVersion)));
serializer.attribute(null, "protocol", Integer.toString(cursor.getInt(colProtocol)));
serializer.attribute(null, "daddr", cursor.getString(colDAddr));
serializer.attribute(null, "dport", Integer.toString(cursor.getInt(colDPort)));
serializer.attribute(null, "time", Long.toString(cursor.getLong(colTime)));
serializer.attribute(null, "block", Integer.toString(cursor.getInt(colBlock)));
serializer.endTag(null, "rule");
}
}
}
private void processAnyTypeGeneric(final String anyTypeXmlNestedArray)
throws XmlPullParserException, IOException {
AnyTypeGeneric xml = new AnyTypeGeneric();
XmlPullParser parser = Xml.createParser();
parser.setInput(new StringReader(anyTypeXmlNestedArray));
XmlNamespaceDictionary namespaceDictionary = new XmlNamespaceDictionary();
Xml.parseElement(parser, xml, namespaceDictionary, null);
assertNotNull(xml);
assertEquals(4, xml.values().size());
// serialize
XmlSerializer serializer = Xml.createSerializer();
ByteArrayOutputStream out = new ByteArrayOutputStream();
serializer.setOutput(out, "UTF-8");
namespaceDictionary.serialize(serializer, "any", xml);
assertEquals(anyTypeXmlNestedArray, out.toString());
}
public XmlSerializer endTag(String namespace, String name) throws IOException,
IllegalArgumentException, IllegalStateException {
mNesting--;
if (mInTag) {
append(" />\n");
} else {
if (mIndent && mLineStart) {
appendIndent(mNesting);
}
append("</");
if (namespace != null) {
append(namespace);
append(':');
}
append(name);
append(">\n");
}
mLineStart = true;
mInTag = false;
return this;
}
/**
* Flatten a List into an XmlSerializer. The list can later be read back
* with readThisListXml().
*
* @param val The list to be flattened.
* @param name Name attribute to include with this list's tag, or null for
* none.
* @param out XmlSerializer to write the list into.
* @see #writeListXml(List, OutputStream)
* @see #writeMapXml
* @see #writeValueXml
* @see #readListXml
*/
public static void writeListXml(List val, String name, XmlSerializer out)
throws XmlPullParserException, java.io.IOException {
if (val == null) {
out.startTag(null, "null");
out.endTag(null, "null");
return;
}
out.startTag(null, "list");
if (name != null) {
out.attribute(null, "name", name);
}
int N = val.size();
int i = 0;
while (i < N) {
writeValueXml(val.get(i), null, out);
i++;
}
out.endTag(null, "list");
}
/**
* Flatten a double[] into an XmlSerializer. The list can later be read back
* with readThisDoubleArrayXml().
*
* @param val The double array to be flattened.
* @param name Name attribute to include with this array's tag, or null for
* none.
* @param out XmlSerializer to write the array into.
*
* @see #writeMapXml
* @see #writeValueXml
* @see #readThisIntArrayXml
*/
public static final void writeDoubleArrayXml(double[] val, String name, XmlSerializer out)
throws XmlPullParserException, java.io.IOException {
if (val == null) {
out.startTag(null, "null");
out.endTag(null, "null");
return;
}
out.startTag(null, "double-array");
if (name != null) {
out.attribute(null, "name", name);
}
final int N = val.length;
out.attribute(null, "num", Integer.toString(N));
for (int i=0; i<N; i++) {
out.startTag(null, "item");
out.attribute(null, "value", Double.toString(val[i]));
out.endTag(null, "item");
}
out.endTag(null, "double-array");
}
/** The purpose of this test is to map an XML with an Array of {@link Enum} objects. */
@Test
public void testParseArrayTypeWithEnum() throws Exception {
ArrayTypeEnum xml = new ArrayTypeEnum();
XmlPullParser parser = Xml.createParser();
parser.setInput(new StringReader(MULTIPLE_ENUM_ELEMENT));
XmlNamespaceDictionary namespaceDictionary = new XmlNamespaceDictionary();
Xml.parseElement(parser, xml, namespaceDictionary, null);
// check type
assertEquals(2, xml.rep.length);
assertEquals(XmlEnumTest.AnyEnum.ENUM_1, xml.rep[0]);
assertEquals(XmlEnumTest.AnyEnum.ENUM_2, xml.rep[1]);
// serialize
XmlSerializer serializer = Xml.createSerializer();
ByteArrayOutputStream out = new ByteArrayOutputStream();
serializer.setOutput(out, "UTF-8");
namespaceDictionary.serialize(serializer, "any", xml);
assertEquals(MULTIPLE_ENUM_ELEMENT, out.toString());
}
/**
* Flatten a List into an XmlSerializer. The list can later be read back
* with readThisListXml().
*
* @param val The list to be flattened.
* @param name Name attribute to include with this list's tag, or null for
* none.
* @param out XmlSerializer to write the list into.
* @see #writeListXml(List, OutputStream)
* @see #writeMapXml
* @see #writeValueXml
* @see #readListXml
*/
public static final void writeListXml(List val, String name, XmlSerializer out) throws XmlPullParserException, java.io.IOException {
if (val == null) {
out.startTag(null, "null");
out.endTag(null, "null");
return;
}
out.startTag(null, "list");
if (name != null) {
out.attribute(null, "name", name);
}
int N = val.size();
int i = 0;
while (i < N) {
writeValueXml(val.get(i), null, out);
i++;
}
out.endTag(null, "list");
}
public boolean getItemContent(final int itemId, final XulHttpServer.XulHttpServerRequest request, final XulHttpServer.XulHttpServerResponse response) {
return execUiOpAndWait(itemId, new UiOpRunnable() {
@Override
boolean beginExec() {
return !(_xulPage == null && _xulView == null);
}
@Override
protected void exec(PageInfo pageInfo, XulPage xulPage, XulView xulView) throws Exception {
if (xulView == null) {
xulView = xulPage.getLayout();
}
XmlPullParserFactory xmlPullParserFactory = XmlPullParserFactory.newInstance();
XmlSerializer writer = xmlPullParserFactory.newSerializer();
writer.setOutput(response.getBodyStream(), "utf-8");
writer.startDocument("utf-8", Boolean.TRUE);
dumpItem(xulView, writer, request.queries);
writer.endDocument();
writer.flush();
}
});
}
/**
* Flatten a double[] into an XmlSerializer. The list can later be read back
* with readThisDoubleArrayXml().
*
* @param val The double array to be flattened.
* @param name Name attribute to include with this array's tag, or null for
* none.
* @param out XmlSerializer to write the array into.
*
* @see #writeMapXml
* @see #writeValueXml
* @see #readThisIntArrayXml
*/
public static final void writeDoubleArrayXml(double[] val, String name, XmlSerializer out)
throws XmlPullParserException, java.io.IOException {
if (val == null) {
out.startTag(null, "null");
out.endTag(null, "null");
return;
}
out.startTag(null, "double-array");
if (name != null) {
out.attribute(null, "name", name);
}
final int n = val.length;
out.attribute(null, "num", Integer.toString(n));
for (int i=0; i<n; i++) {
out.startTag(null, "item");
out.attribute(null, "value", Double.toString(val[i]));
out.endTag(null, "item");
}
out.endTag(null, "double-array");
}
/**
* Flatten an int[] into an XmlSerializer. The list can later be read back
* with readThisIntArrayXml().
*
* @param val The int array to be flattened.
* @param name Name attribute to include with this array's tag, or null for
* none.
* @param out XmlSerializer to write the array into.
*
* @see #writeMapXml
* @see #writeValueXml
* @see #readThisIntArrayXml
*/
public static final void writeIntArrayXml(int[] val, String name,
XmlSerializer out)
throws XmlPullParserException, IOException {
if (val == null) {
out.startTag(null, "null");
out.endTag(null, "null");
return;
}
out.startTag(null, "int-array");
if (name != null) {
out.attribute(null, "name", name);
}
final int N = val.length;
out.attribute(null, "num", Integer.toString(N));
for (int i=0; i<N; i++) {
out.startTag(null, "item");
out.attribute(null, "value", Integer.toString(val[i]));
out.endTag(null, "item");
}
out.endTag(null, "int-array");
}
void writeKeySetManagerServiceLPr(XmlSerializer serializer) throws IOException {
serializer.startTag(null, "keyset-settings");
serializer.attribute(null, "version", Integer.toString(CURRENT_VERSION));
writePublicKeysLPr(serializer);
writeKeySetsLPr(serializer);
serializer.startTag(null, "lastIssuedKeyId");
serializer.attribute(null, "value", Long.toString(lastIssuedKeyId));
serializer.endTag(null, "lastIssuedKeyId");
serializer.startTag(null, "lastIssuedKeySetId");
serializer.attribute(null, "value", Long.toString(lastIssuedKeySetId));
serializer.endTag(null, "lastIssuedKeySetId");
serializer.endTag(null, "keyset-settings");
}
private static void dumpNodeRec(AccessibilityNodeInfo node, XmlSerializer serializer,int index,
int width, int height) throws IOException {
serializer.startTag("", "node");
if (!nafExcludedClass(node) && !nafCheck(node))
serializer.attribute("", "NAF", Boolean.toString(true));
serializer.attribute("", "index", Integer.toString(index));
serializer.attribute("", "text", safeCharSeqToString(node.getText()));
serializer.attribute("", "resource-id", safeCharSeqToString(node.getViewIdResourceName()));
serializer.attribute("", "class", safeCharSeqToString(node.getClassName()));
serializer.attribute("", "package", safeCharSeqToString(node.getPackageName()));
serializer.attribute("", "content-desc", safeCharSeqToString(node.getContentDescription()));
serializer.attribute("", "checkable", Boolean.toString(node.isCheckable()));
serializer.attribute("", "checked", Boolean.toString(node.isChecked()));
serializer.attribute("", "clickable", Boolean.toString(node.isClickable()));
serializer.attribute("", "enabled", Boolean.toString(node.isEnabled()));
serializer.attribute("", "focusable", Boolean.toString(node.isFocusable()));
serializer.attribute("", "focused", Boolean.toString(node.isFocused()));
serializer.attribute("", "scrollable", Boolean.toString(node.isScrollable()));
serializer.attribute("", "long-clickable", Boolean.toString(node.isLongClickable()));
serializer.attribute("", "password", Boolean.toString(node.isPassword()));
serializer.attribute("", "selected", Boolean.toString(node.isSelected()));
serializer.attribute("", "bounds", AccessibilityNodeInfoHelper.getVisibleBoundsInScreen(
node, width, height).toShortString());
int count = node.getChildCount();
for (int i = 0; i < count; i++) {
AccessibilityNodeInfo child = node.getChild(i);
if (child != null) {
if (child.isVisibleToUser()) {
dumpNodeRec(child, serializer, i, width, height);
child.recycle();
} else {
Log.i(LOGTAG, String.format("Skipping invisible child: %s", child.toString()));
}
} else {
Log.i(LOGTAG, String.format("Null child %d/%d, parent: %s",
i, count, node.toString()));
}
}
serializer.endTag("", "node");
}
void xml(XmlSerializer xmlSerializer, String omkOsmUser) throws IOException {
// set the tags for the element (all element types can have tags)
Set<String> tagKeys = tags.keySet();
for (String tagKey : tagKeys) {
String tagVal = tags.get(tagKey);
if (tagVal == null || tagVal.equals("")) {
continue;
}
xmlSerializer.startTag(null, "tag");
xmlSerializer.attribute(null, "k", tagKey);
xmlSerializer.attribute(null, "v", tagVal);
xmlSerializer.endTag(null, "tag");
}
}
private void addTextTag(final String key, final String s, final XmlSerializer serializer) throws Exception
{
serializer.startTag(FormulaList.XML_NS, FormulaList.XML_TERM_TAG);
serializer.attribute(FormulaList.XML_NS, FormulaList.XML_PROP_KEY, key);
serializer.attribute(FormulaList.XML_NS, FormulaList.XML_PROP_TEXT, s);
serializer.endTag(FormulaList.XML_NS, FormulaList.XML_TERM_TAG);
}
/**
* Flatten an int[] into an XmlSerializer. The list can later be read back
* with readThisIntArrayXml().
*
* @param val The int array to be flattened.
* @param name Name attribute to include with this array's tag, or null for
* none.
* @param out XmlSerializer to write the array into.
*
* @see #writeMapXml
* @see #writeValueXml
* @see #readThisIntArrayXml
*/
public static final void writeIntArrayXml(int[] val, String name,
XmlSerializer out)
throws XmlPullParserException, java.io.IOException {
if (val == null) {
out.startTag(null, "null");
out.endTag(null, "null");
return;
}
out.startTag(null, "int-array");
if (name != null) {
out.attribute(null, "name", name);
}
final int N = val.length;
out.attribute(null, "num", Integer.toString(N));
for (int i=0; i<N; i++) {
out.startTag(null, "item");
out.attribute(null, "value", Integer.toString(val[i]));
out.endTag(null, "item");
}
out.endTag(null, "int-array");
}
public XmlSerializer endTag(String namespace, String name) throws IOException, IllegalArgumentException, IllegalStateException {
if (mInTag) {
append(" />\n");
} else {
append("</");
if (namespace != null) {
append(namespace);
append(':');
}
append(name);
append(">\n");
}
mInTag = false;
return this;
}
private final void serializeEntryContents(XmlSerializer serializer,
int format) throws IOException {
if (format != FORMAT_CREATE) {
serializeId(serializer, entry.getId());
}
serializeTitle(serializer, entry.getTitle());
if (format != FORMAT_CREATE) {
serializeLink(serializer,
"edit" /* rel */, entry.getEditUri(), null /* type */);
serializeLink(serializer,
"alternate" /* rel */, entry.getHtmlUri(), "text/html" /* type */);
}
serializeSummary(serializer, entry.getSummary());
serializeContent(serializer, entry.getContent());
serializeAuthor(serializer, entry.getAuthor(), entry.getEmail());
serializeCategory(serializer,
entry.getCategory(), entry.getCategoryScheme());
if (format == FORMAT_FULL) {
serializePublicationDate(serializer, entry.getPublicationDate());
}
if (format != FORMAT_CREATE) {
serializeUpdateDate(serializer, entry.getUpdateDate());
}
serializeExtraEntryContents(serializer, format);
}
@Deprecated
public static void writeBitmapAttribute(XmlSerializer out, String name, Bitmap value)
throws IOException {
if (value != null) {
final ByteArrayOutputStream os = new ByteArrayOutputStream();
value.compress(CompressFormat.PNG, 90, os);
writeByteArrayAttribute(out, name, os.toByteArray());
}
}
private void attribute(XmlSerializer serializer, String attributeName, Cursor cursor, String columnName)
throws IllegalArgumentException, IllegalStateException, IOException {
String value = cursor.getString(cursor.getColumnIndex(columnName));
if (value != null) {
serializer.attribute("", attributeName, value);
}
}
void serialize(XmlSerializer serializer, String elementName) throws IOException {
String elementLocalName = null;
String elementNamespaceUri = null;
if (elementName != null) {
int colon = elementName.indexOf(':');
elementLocalName = elementName.substring(colon + 1);
String alias = colon == -1 ? "" : elementName.substring(0, colon);
elementNamespaceUri = getNamespaceUriForAliasHandlingUnknown(errorOnUnknown, alias);
}
serialize(serializer, elementNamespaceUri, elementLocalName);
}