📄 xmlblob.java
字号:
/* Copyright (c) 2006 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */package com.google.gdata.util;import com.google.gdata.util.common.xml.XmlWriter;import java.io.IOException;import java.util.ArrayList;import java.util.Collection;import java.util.LinkedList;import java.util.List;/** * Arbitrary self-contained block of XML. * * */public class XmlBlob { /** * Initial {@code xml:lang} value. This value is typically inherited through * the XML tree. The blob itself may contain overrides. * <p> * * See http://www.w3.org/TR/REC-xml/#sec-lang-tag for more information. */ protected String lang; public String getLang() { return lang; } public void setLang(String v) { lang = v; } /** * Initial {@code xml:base} value. This value is typically inherited through * the XML tree. The blob itself may contain overrides. * <p> * * See http://www.cafeconleche.org/books/xmljava/chapters/ch03s03.html for * more information. */ protected String base; public String getBase() { return base; } public void setBase(String v) { base = v; } /** Namespace declarations inherited when this blob was parsed. */ protected LinkedList<XmlNamespace> namespaces = new LinkedList<XmlNamespace>(); public List<XmlNamespace> getNamespaces() { return namespaces; } /** * Contents of the blob. Depending on how the blob was parsed, it may contain * top-level text() nodes mixed together with child elements. */ protected String blob; public String getBlob() { return blob; } public void setBlob(String v) { blob = v; } /** * Contains strings from {@code blob} for full-text indexing. * Valid only when this blob comes from {@link XmlParser}. */ protected String fullText; public String getFullText() { return fullText; } public void setFullText(String v) { fullText = v; } /** Generates an element opening tag containing an XML blob. */ public static void startElement(XmlWriter w, XmlWriter.Namespace namespace, String elementName, XmlBlob xml, Collection<XmlWriter.Attribute> additionalAttrs, Collection<XmlWriter.Namespace> additionalNs) throws IOException { Collection<XmlWriter.Attribute> attrs; Collection<XmlWriter.Namespace> namespaces; if (xml != null) { String lang = xml.getLang(); String base = xml.getBase(); if (lang != null || base != null) { attrs = new ArrayList<XmlWriter.Attribute>(); if (additionalAttrs != null) { attrs.addAll(additionalAttrs); } if (lang != null) { attrs.add(new XmlWriter.Attribute("xml:lang", lang)); } if (base != null) { attrs.add(new XmlWriter.Attribute("xml:base", base)); } } else { assert lang == null && base == null; attrs = additionalAttrs; } List<XmlNamespace> blobNamespaces = xml.getNamespaces(); int additionalNsSize = (additionalNs == null ? 0 : additionalNs.size()); if (blobNamespaces.size() == 0 && additionalNsSize == 0) { namespaces = null; } else { namespaces = new ArrayList<XmlWriter.Namespace>(additionalNsSize + blobNamespaces.size()); // Blob namespaces have to go first, because we depend on their aliases // being preserved. If an additional namespace has a conflicting alias, // we want the additional namespace to get an arbitrarily generated // alias, not the blob's. for (XmlNamespace blobNs: blobNamespaces) { namespaces.add(new XmlWriter.Namespace(blobNs.getAlias(), blobNs.getUri())); } if (additionalNs != null) { namespaces.addAll(additionalNs); } } } else { assert xml == null; attrs = additionalAttrs; namespaces = additionalNs; } w.startElement(namespace, elementName, attrs, namespaces); } /** Generates an element closing tag containing an XML blob. */ public static void endElement(XmlWriter w, XmlWriter.Namespace namespace, String elementName, XmlBlob xml) throws IOException { if (xml != null && xml.getBlob() != null) { w.innerXml(xml.getBlob()); } w.endElement(namespace, elementName); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -